DOS批處理命令之for命令(批量安裝APK)
for命令語法及使用
@ECHO OFF
set /a sum=0
for %%x in (*.txt) do (
echo %%x檔案的內容如下:
type %%x
echo.
set /a sum=sum+1
)
echo 一共顯示了%sum%個文字檔案!
執行結果:
補充:
以上是在批處理指令碼使用for命令需使用%%x, 而如果是在終端命令上使用for命令時則使用%x,見下:
C:\work>for %x in (*.txt) do type %x
C:\work>type a.txt
我是a.txt
C:\work>type b.txt
我是b.txt
C:\work>type c.txt
我是c.txt
C:\work>
PS :一鍵安裝apk :onekeyinstallapk.bat
@ECHO OFF
set /a sum=0
for %%x in (*.apk) do (
echo please wait some time,installing %%x ...
adb install -r %%x
echo.
set /a sum=sum+1
)
echo Installed %sum% apk.
pause
執行結果:
以下內容摘自:http://www.feiesoft.com/windows/cmd/for.htm
對一組檔案中的每個檔案執行指定的命令。
MS-DOS命令語法
for {%variable|%%variable} in (set) do command [ CommandLineOptions]
MS-DOS命令引數
{%variable|%%variable}
必需。代表可替換的引數。使用 %variable 通過命令提示符執行 for 命令。使用 %%variable 在批處理檔案中執行 for 命令。變數要區分大小寫,並且必須用 Alpha 值表示,例如,%A、%B 或 %C。
(set)
必需。指定要用指定命令處理的一個或多個檔案、目錄、數值範圍以及文字字串。需要括號。
command
必需。指定要對包括在指定 (set)中的每個檔案、目錄、數值範圍以及文字字串所執行的命令。
CommandLineOptions
指定要通過指定命令使用的任何命令列選項。
/?
在命令提示符顯示幫助。
MS-DOS命令註釋
- 使用 for
可以在批處理檔案中或直接從命令提示符使用 for 命令。
- 使用批處理引數
下列屬性適用於 for 命令:
- for 命令使用指定 set中的每個文字字串替換 %variable 或 %%variable,直到 command 處理所有檔案為止。
- 記住,for variable名是區分大小寫、全域性的,並且每次總共不超過 52 個是活動的。
- 要避免批處理引數從%0 到 %9 混淆,對 variable 可以使用除數字 0 到 9 之外的任何字元。對於簡單的批處理檔案,單個字元即可奏效,例如 %%f。
- 在複雜的批處理檔案中可以使用 variable 的多個值來區分不同的可替換變數。
- 顯示一組檔案
set 引數可以代表單個或多個檔案組。可以使用萬用字元(即,* 和 ?)指定檔案組。以下為有效檔案組:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令時,set中的第一個值代替 %variable 或 %%variable,然後由指定的命令處理該值。這一直會繼續下去,直到處理完與 set 值相對應的所有檔案(或檔案組)為止。
- 使用 in 和 do 關鍵字
In 和 do 不是引數,但必須將它們與 for 一起使用。如果省略其中任何一個關鍵字,就會出現錯誤訊息。
- 使用 for 的其它形式
如果命令副檔名處於啟用狀態(即,預設設定),則支援 for 的下列其它形式:
- 僅為目錄
如果 set 包含萬用字元(* 和 ?),則為匹配 set 的每個目錄(而不是指定目錄中的檔案組)而執行指定的 command。語法是:
for /D {%% | %}variable in (set) do command [CommandLineOptions]
- 遞迴
進入根目錄樹 [Drive:]Path,在樹的每個目錄中執行 for 語句。如果在 /R 後沒有指定目錄,則假定為當前目錄。如果 set 只是一個句號 (.),則只列舉目錄樹。語法是:
for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]
- 重複數值範圍
使用迭代變數設定起始值 (start#) ,然後一步步執行一系列設定範圍的值,直到該值超過設定的終止值 (end#)。/L 將通過對 start# 與 end# 進行比較,執行迭代變數。如果 start# 小於 end#,就會執行該命令。如果迭代變數超過 end#,則命令解釋程式退出此迴圈。也可以使用負 step# 以遞減數值的方式一步步執行此範圍內的值。例如,(1,1,5) 生成順序 1 2 3 4 5,而 (5,-1,1) 則生成順序 (5 4 3 2 1)。語法是:
for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]
- 重複和檔案解析
使用檔案解析過程處理命令輸出、字串和檔案內容。使用迭代變數定義要檢查的內容或字串,以及使用各種 ParsingKeywords 選項進一步修改解析方式。使用 ParsingKeywords 令牌選項指定哪些令牌應該傳遞為迭代程式變數。注意:在沒有使用令牌選項時,/F 將僅檢查第一個令牌。
檔案解析過程包括讀取輸出、字串或檔案內容、分成獨立的文字行及然後將每行解析成零個或更多個令牌。然後通過設定為令牌的迭代程式變數值,呼叫 for 迴圈。預設情況下,/F 傳遞每個檔案每一行的第一個空白分隔符號。跳過空行。語法的不同點為:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]
filenameset 引數指定一個或多個檔名稱。在繼續到 filenameset中的下一個檔案之前,每個檔案都會被開啟、讀取和處理。要覆蓋預設解析行為,指定 "ParsingKeywords"。這是一個引用字串,它包含一個或多個關鍵字以指定不同的解析選項。
如果使用 usebackq 選項,請使用如下語法之一:
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
下表列出可以用於 ParsingKeywords 的解析關鍵字。
關鍵字 說明 eol=c 指定行尾字元(只一個字元)。 skip=n 指定在檔案的開頭跳過的行數。 delims=xxx 指定定界符集合。這將替換空格和製表符的預設分隔符集。 tokens=x,y,m-n 指定將哪些令牌從每行傳遞到每個迭代的 for 正文。結果就分配了附加變數名稱。m-n 格式是一個範圍,指定從mth 到 nth 的令牌。如果 tokens=字串中最後一個字元是星號 (*),則將分配附加的變數,並在解析的最後一個令牌後在行上接收剩餘的文字。 usebackq 指定可以使用引號引用 filenameset中的檔名稱,將後面帶有引號的字串作為一個命令執行,而帶有單引號的字串是文字字串命令。 - 變數替換
已經增強了 for 變數引用的替換修改程式。下表列出可選語法(對於任意變數 I)。
帶有修改程式的變數 說明 %~I 展開刪除任何前後引號 ("") 的 %I。 %~fI 將 %I 展開到完全合格的路徑名。 %~dI 只將 %I 展開到驅動器號。 %~pI 只將 %I 展開到路徑。 %~nI 只將 %I 展開到檔名。 %~xI 只將 %I 展開到副檔名。 %~sI 展開路徑以只包含短名稱。 %~aI 將 %I 展開到檔案的檔案屬性。 %~tI 將 %I 展開到檔案的日期和時間。 %~zI 將 %I 展開到檔案大小。 %~$PATH:I 搜尋 PATH 環境變數所列出的目錄,並將 %I 展開到第一個找到的完全合格的名稱。如果沒有定義環境變數名稱,或搜尋沒有找到檔案,則此修改程式擴充套件成空字串。 下表列出可用來獲得綜合結果的修改程式組合。
變數(使用組合的修改程式) 說明 %~dpI 只將 %I 展開到驅動器號和路徑。 %~nxI 只將 %I 展開到檔名和副檔名。 %~fsI 將 %I 展開到只包含短名稱的完整路徑名。 %~dp$PATH:I 在 PATH 環境變數中所列出的目錄中搜索 %I,並展開到第一個找到結果的驅動器號和路徑。 %~ftzaI 將 %I 展開到輸出行(如 dir一樣)。 在上述範例中,可以用其它有效值替換 %I 和 PATH。有效的 for 變數名終止 %~ syntax。
使用大寫變數名(例如 %I),可以使程式碼更具可讀性,並且避免與不區分大小寫的修改程式混淆。
- 僅為目錄
- 解析字串
通過將 Filenameset 包括在圓括號內,並且外面再帶上單引號(即,'filenameset'),可以使用 for /F 對直接字串解析邏輯。將 Filenameset 視為從某個檔案輸入的單行,然後接受解析。
- 解析輸出
通過將圓括號之間的 filenameset 變為後面帶有引號的字串,可以利用 for /F 命令解析命令輸出。將它作為命令列,此命令被傳遞給子 Cmd.exe,並將輸出捕獲到記憶體並進行解析,就象它是一個檔案一樣。
MS-DOS命令範例
要在批處理檔案中使用 for,請使用以下語法:
for %%variable in (set) do command [CommandLineOptions]
要通過使用可替換變數 %f 顯示當前目錄中副檔名為 .doc 或 .txt 的所有檔案的內容,請鍵入:
for %f in (*.doc *.txt) do type %f
在前述範例中,當前目錄中副檔名為 .doc 或 .txt 的每個檔案都被替代為變數 %f ,直到每個檔案的內容都顯示為止。要在批處理檔案中使用該命令,只需使用 %%f 替換 %f 的每個事件。否則忽略此變數,並顯示一條錯誤訊息。
要解析檔案,同時忽略註釋行,請鍵入:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
這個命令解析 myfile.txt 檔案的每一行,忽略以分號開頭的行,將第二和第三個令牌從各行傳遞到 FOR 正文(令牌通過逗號或空格分隔)中。FOR 語句的正文引用 %i 以獲得第二個令牌,引用 %j 以獲得第三個令牌,引用 %k 以獲得其餘全部令牌。如果您提供的檔名包含空格,請使用引號將文字引起來(例如,"File Name")。要使用引號,必須使用 usebackq。否則,就將引號解釋為定義要解析的文字字串。
%i 在 FOR 語句中明確宣告,並且 %j 和 %k 使用 tokens= 隱含宣告。只要它不會引起嘗試宣告高於字母“z”或“Z”的某個變數,則使用 tokens= 可以指定最多 26 個令牌。
要通過將 filenameset 放在括號之間來解析命令輸出,請鍵入:
for /F "usebackq delims==" %i IN (`set`) DO @echo %i
這個範例列舉當前環境中的環境變數名。