วิธีใช้ autohotkey เพื่อเรียกใช้โปรแกรมบรรทัดคำสั่ง?


1

ฉันกำลังนั่งอยู่หลังพร็อกซีขององค์กรฉันต้องเปลี่ยนพร็อกซีของคอมไพล์บ่อยครั้งเมื่อทำการพัฒนา

ดังนั้นฉันต้องการใช้ autohotkey เพื่อสร้างสคริปต์เพื่อสลับการตั้งค่าพร็อกซีของ git แต่ฉันไม่สามารถหาวิธีทำได้:

Run %comspec% /c ""C:\Program Files\Git\bin\git.exe" "config" "--global" "http.proxy" "http://xxx:8080""
Run %comspec% /c ""C:\Program Files\Git\bin\git.exe" "config" "--global" "https.proxy" "xxx:8080""
;Run, "C:\Program Files\Git\bin\git.exe" config --global http.proxy http://xxx:8080
;Run, "C:\Program Files\Git\bin\git.exe" config --global https.proxy http://xxx:8080

ข้างต้นเป็นสิ่งที่ฉันพยายาม แต่พวกเขาไม่ทำงาน กรุณาช่วย.

คำตอบ:


1

การพยายามเชลล์คำสั่ง git อาจทำให้การดีบักได้ยาก ... นี่คือตัวอย่างโค้ดบางส่วน ...

; need quotes for running inside of cmd (w/ comspec)
; super global to reference it in other functions
global gitExe := quote("C:\Program Files\git\bin\git.exe")

tmpFile := A_Temp . "\gittemp.txt"
fileDelete, %tmpFile%
RunWait, %comspec% /c %gitExe% status > %tmpFile%, %A_ScriptDir%, Hide
FileReadLine, tmpVar1, %tmpFile%, 1
FileReadLine, tmpVar2, %tmpFile%, 2

global WorkingDirectory := "C:\Something"
RunWait, %comspec% /c %gitExe% --global http.proxy http://xxx:8080, %WorkingDirectory%, Hide

ไหน ....

Quote(text)
{
    return chr(34) . text . chr(34)
}

นี่คือบางสิ่งที่ฉันทำเพื่อแก้ไขปัญหา ...

  1. การวางคำสั่ง git ในตัวแปรทำให้ง่ายต่อการเปลี่ยนแปลงในภายหลังหรือการอ้างอิง
  2. ฉันชอบที่จะมี quote() ฟังก์ชั่นตั้งแต่การใช้ = ฉันสับสนและฉันมักจะใช้ := บ่อยขึ้น
  3. การใช้ Runwait มีประโยชน์ถ้าคุณมีคำสั่งที่ต่อเนื่องเพื่อเรียกใช้ที่ไม่ควรดำเนินการในเวลาเดียวกัน
  4. การใช้ comspec /c มีประโยชน์หากคุณต้องการเปลี่ยนเส้นทางสคริปต์เอาต์พุตผ่าน commandline vs. การใช้คำสั่งที่มีในตัวเองทั้งหมด
  5. หากคุณต้องการดีบักสคริปต์ที่ซับซ้อนยิ่งขึ้นให้ตั้งค่าคำสั่งแบบเต็มที่คุณต้องการเรียกใช้เป็นตัวแปรแล้วถามผู้ใช้ว่าการดำเนินการสำเร็จหรือไม่และหากพวกเขาเลือกไม่ให้คัดลอกเนื้อหาไปยังคลิปบอร์ดเพื่อให้คุณสามารถวางลงบน บรรทัดคำสั่ง. ด้วยวิธีนี้เมื่อคุณไปถึงบางสิ่งที่คุณสามารถตรวจสอบว่ามันใช้งานได้หรือไม่และคุณไม่ได้เปิดหน้าต่างคำสั่งกดวางและดูว่าทำไมจึงล้มเหลว

นั่นคือ

;---------------------------------------------------------------------------------------------------------
; git_CommitAll()  - ; Commit everything on the current branch using the commit message
;
;---------------------------------------------------------------------------------------------------------
git_CommitAll(commitMsg)
{
    tmpCmd := comspec . " /c " . quote(gitExe . " commit -a -m " . quote(commitMsg))
    RunWait, %tmpCmd%, %WorkingDirectory%, hide   ; change hard-coded folder as needed
    if debug := True ; set this true/false here to use debugging or not
    {
        msgbox,4,,Did command work right?
        IfMsgBox, no
        {
            clipboard := tmpCmd
            msgbox Command has been copied to clipboard`n`n%tmpCmd%`n`nClick OK to continue...
        }
    }

    return True
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.