Разверните Автоответчик Аргументов Командной Строки

#windows-10 #autohotkey

Вопрос:

TLDR; Я пытаюсь найти эквивалент bash $@ в autohotkey

Я разрабатываю скрипт автоответчика, который будет запускать определенную программу при запуске.

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

Я хочу, чтобы программа запускалась с определенными аргументами командной строки, которые я предоставляю при запуске сценария.

> ahk_prog.exe arg_1 arg_2

Я в основном хочу иметь возможность конвертировать свои аргументы командной строки, предоставленные при запуске программы, чтобы иметь возможность запускать команду Run каждый раз, когда я ее запускаю.

Я попробовал это:

 <^#i::Run D:Scriptsmyprog.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:Scriptsmyprog.exe "%*%" ; Trying Batch Like syntax since %1% and %2% are valid 
; Runs with whatever arguments I provide on pressing Ctrl   Win   I 
 

Оба они не работают. Есть ли способ сделать это?

Ответ №1:

A_Args (документы) — это массив, поэтому вам придется объединить его в строку.
Например:

 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:Scriptsmyprog.exe " arg_list
 

Также можно было бы сделать как однострочный, например так:

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