1. 程式人生 > >DOS批處理命令之for命令(批量安裝APK)

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

這個範例列舉當前環境中的環境變數名。