如何使用 autohotkey 运行命令行程序?

如何使用 autohotkey 运行命令行程序?

我使用公司代理,在开发过程中需要频繁切换 git 的代理。

所以我想使用 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如果您需要通过命令行重定向脚本输出,而不是使用完全独立的命令,那么使用会很有帮助
  5. 如果您需要调试更复杂的脚本,请将要运行的完整命令设置为变量,然后询问用户操作是否成功,如果他们选择否,则将内容复制到剪贴板,以便您可以将其粘贴到命令行上。这样,当您遇到某些问题时,您可以检查它是否有效,如果无效,您可以打开命令窗口,点击粘贴,然后查看失败的原因。

IE,

;---------------------------------------------------------------------------------------------------------
; 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
}

相关内容