[基礎] 如何用 AHK 處理命令行參數
寫過 C 語言的朋友都清楚 main() 函數可以有兩個參數,argc 和 argv,argc 是命令行參數個數,argv 則用於訪問具體參數,使用起來非常容易。那麼用 AHK 如何訪問命令行參數呢?
官方文檔有介紹,但並不是很詳細,容易讓人看後感覺一頭霧水,這裡簡單整理一下。
獲取參數的個數
要處理參數,得先清楚有沒有參數,也就是獲取參數的個數。
%0% 內部變數是用來存放參數個數的,這樣可以用 MsgBox 彈出參數個數,是不是很簡單?
MsgBox, %0%
但需要注意的時,如果一個變數名是 a,我們可以用 MsgBox, %a% 和 MsgBox, % a 兩種方式在 MsgBox 中訪問
a。但此時我們不能用 MsgBox, % 0 來訪問參數個數,因為這樣會直接彈出數字 0。那麼如果我一定要在 MsgBox 的參數前加 % 呢?可以先將 %0% 轉存到其他變數:; 注意這裡不能用 :=argc = %0%MsgBox, % argc
這樣 argc 就和其他變數無異了。
如果我們想判斷命令行參數有多少個,也有兩種方式:
第一種方式,也是官方文檔中的例子:
if 0 = 2{ MsgBox, 有兩個參數}
有些朋友看到這就一頭霧水了,0 怎麼會等於 2?其實這句 if 判斷里,2 確實是數字 2,而 0 並非數字 0,而是 %0%
的值,也就是命令行參數的個數。從這裡也可以看出 AHK 語言不嚴謹的地方。如果實在認為這樣判斷太違背直覺,無法接受,也可以使用迂迴的辦法。第二種方式:
argc = %0%if (argc == 2){ MsgBox, 有兩個參數}
這樣就正常多了。但需要注意,如下用法是錯誤的:
if (%0% == 2){ MsgBox, 有兩個參數}
這也是讓很多人困惑的地方。畢竟 %0% 是特例,不能像用其他正常變數一樣使用,需要特殊記憶一下。
獲取具體參數
當我們知道了參數個數,就可以去讀參數的值了,有了剛才的鋪墊,這一步也容易很多了。
%1% 是第一個參數,%2% 是第二個參數,依次類推。而訪問 %1% %2% 的方式,和訪問 %0% 是一樣的。為了不違反直覺,還是建議先將參數轉存到一個有意義的變數名,再作處理,例如:
flag = %1%if (flag == "-c"){ MsgBox, -c 參數已傳入}
遍歷所有參數
遍歷所有參數是一種常見的處理方法,在 AHK 里也是比較容易的:
Loop, %0%{ param := %A_Index% MsgBox, %param%}
這裡又有事情需要注意了。這個 Loop 看起來沒什麼,%0% 就是參數的個數,有幾個參數就循環幾次,但param := %A_Index%,這裡用的是:=,而不是=。這個之前的param = %1%是不同的。為什麼有這樣的區別呢?
A_Index 存放的是一個數字,如果直接用param := A_Index,那麼 param 的值自然也就是數字了,而不是對應的參數。所以需要用%將這個數字解析成參數。這個用法又和通常的變數有所不同。
這種用法並非處理命令行參數時的特例,我們可以看下這個例子:
a := "b"b := "c"d := %a%MsgBox, %d%
a 的值是 b,b 的值是 c,d := %a%中,%a% 的值是 b,所以這裡的d := %a%等同於d := b,於是 d 的值是 c。也就是可以將變數的值解析成變數名,再去取變數的值,這樣的技巧在很多語言里都可以用。
付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領域相關問題,靈活定價,歡迎諮詢,微信 ly50247。
推薦閱讀:
※[基礎] 如何在 AHK 中運行其他軟體
※AutoHotKey 常用函數或小技巧有哪些分享?
※【熱鍵】組合鍵與序列鍵
※用AutoHotkey(AHK) 使用滑鼠手勢在win10下快速切換虛擬桌面?
TAG:AutoHotkey |