首页 > 解决方案 > 展开命令行参数自动热键

问题描述

TLDR;我正在尝试$@在 autohotkey中找到与 bash 等效的

我正在开发一个自动热键脚本,它会在触发时运行特定的程序。

<^#i::Run D:\Scripts\myprog.exe "arg_1" "arg_2"
; Runs with whatever arguments I provide on pressing Ctrl + Win + I 

我希望程序以特定的命令行参数启动;我在启动脚本时提供的。

> ahk_prog.exe arg_1 arg_2

我基本上希望能够将启动程序期间提供的命令行参数转换为能够在每次触发时运行运行命令。

我试过这个:

<^#i::Run D:\Scripts\myprog.exe %A_Args% ; A_Args is the array of CLI arguments 
; Runs with whatever arguments I provide on pressing Ctrl + Win + I 

我也试过这个(这个根本不编译)

<^#i::Run D:\Scripts\myprog.exe "%*%" ; Trying Batch Like syntax since %1% and %2% are valid 
; Runs with whatever arguments I provide on pressing Ctrl + Win + I 

它们都不起作用。有没有办法做到这一点?

标签: windows-10autohotkey

解决方案


A_Args(docs)是一个数组,因此您可以将它加入一个字符串中。
例如:

for each, arg in A_Args
    arg_list .= """" arg """ "

arg_list := RTrim(arg_list) ;trim trailing space (might be unnecessary)
MsgBox, % arg_list

在参数周围添加引号,因为如果您的参数中有空格,它们当然是需要的。
然后你可以像这样将它添加到你的Run命令中:

for each, arg in A_Args
    arg_list .= """" arg """ "

arg_list := RTrim(arg_list) ;trim trailing space (might be unnecesary)

<^#i::Run, % "D:\Scripts\myprog.exe " arg_list

也可以像这样作为单线来完成:

<^#i::Run, % "D:\Scripts\myprog.exe " RTrim(Format(StrReplace(Format("{:0" A_Args.length() "}", ""), 0, """{}"" "), A_Args*))

推荐阅读