cmd中for的用法


在cmd窗口輸入for /?后的原文,被我自己“翻譯”了一下,更像人話了。

推薦去https://www.cnblogs.com/cbugs/p/8992059.html這篇部落格里去看看,講的更好。

 

在cmd窗口輸入for /?后

 

原文“翻譯”

對一組文件中的每一個文件執行某個特定命令。

 

基本格式:

FOR %variable IN (set) DO command [command-parameters]

指令

含義

%variable

指定一個單一字母可替換的參數。

(set)    

指定一個或一組文件。可以使用通配符。

command

指定對每個文件執行的命令。

command-parameters

為特定命令指定參數或命令行開關。

   

注意:

在批處理程序中使用 FOR 命令時,指定變量請使用 %%variablem,而不要用 %variable。

此外,變量名稱是區分大小寫的,所以 %i 不同於 %I.

 

 FOR 命令支持以下形式:

 

/D 目錄

FOR /D %variable IN (set) DO command [command-parameters]

 只搜索當前目錄而非文件,可以指定通配符。

 

/R 遞歸

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

以 [drive:]path 為根,對每個目錄執行FOR語句。

如果在 /R 后沒有指定目錄規范,則使用當前目錄。

如果集僅為一個單點(.)字符,則枚舉該目錄樹。

 

/L 增量序列

FOR /L %variable IN (start,step,end) DO command [command-parameters]

該集表示以增量形式從開始到結束的一個數字序列。

因此,(1,1,5)將產生序列1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)

 

/F 文本、命令分析

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

 

如果有 usebackq 選項就要寫成以下格式:

FOR /F ["options"] %variable IN ("file-set") DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]

 

fileset 解析一個或多個文件名。

String 解析字符串

conmmand 解析一個命令的結果,可以和tokens連用以用來獲取制定命令結果的指定行。

 

fileset 中的每份文件都被打開、讀取並經過處理。

處理時讀取文件,將其分成一行行的文字, 然后將每行解析成零或更多的符號。

最后用已找到的符號字符串變量值調用 For 循環。 

 

默認情況下,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。

可以在/F后面添加字符串,其內容及意義如下:

"options"的內容

意義

eol=c  

指定一個行注釋字符的結尾(就一個)。例如eol=;--忽略以分號打頭的那些行。

skip=n   

指定在文件開始時忽略的行數。例如skip=2 --忽略2行

delims=xxx

指定分隔符,可以有多個。

tokens=x,y,m-n

指每行的哪一個符號被傳遞到每個迭代 的 for 本身。這會導致額外變量名稱的分配。

可以使用m-n指定一個范圍的變量。

若指定的最后一個字符是星號,那額外的變量將會分配到最后一個變量解析之后該行剩余的文本。

usebackq

若指定的文件名稱有空格,則需要對其進行轉義。

但使用‘’或“”會被理解為字符串或命令。

所以添加該參數以指定新的轉義方式。

 

 

例:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

 

分析 myfile.txt中的每一行,忽略以分號打頭的那些行,將每行中的第二個和第三個符號傳遞給 for 函數體,指定分隔符為“,”或空格。

此 for 函數體的語句引用 %i 來獲得第二個符號,引用 %j 來獲得第三個符號,引用 %k來獲得第三個符號后的所有剩余符號。

對於帶有空格的文件名,你需要用雙引號將文件名括起來,為了用這種方式來使用雙引號,還需要使用 usebackq 選項。

否則,雙引號會被理解成是用作定義某個要分析的字符串的。

 

%i 在 for 語句中顯式聲明,%j 和 %k 是通過tokens= 選項隱式聲明的。

可以通過 tokens= 一行指定最多 26 個符號,不要試圖聲明一個高於字母 "z" 或"Z" 的變量。

請記住,FOR 變量是單一字母、分大小寫和全局的變量;而且,不能同時使用超過 52 個。

 

例:

FOR /F "usebackq" %i in ('abc') do echo %i

打印abc

 

 

還可以在相鄰字符串上使用 FOR /F 分析邏輯,方法是,用單引號將括號之間的 file-set 括起來。

這樣,該字符串會被當作一個文件中的一個單一輸入行進行解析。

 

可以用 FOR /F 命令來分析命令的輸出。

方法是,使用反引號括起字符串,則該字符串會被當作命令行,其命令結果會輸出到內存中並被當作文件分析。

 

例:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

枚舉當前環境中的環境變量名稱。

 

另外,FOR 變量參照的替換已被增強。你現在可以使用下列

選項語法:

 

     %~I          - 刪除任何引號("),擴展 %I

     %~fI        - 將 %I 擴展到一個完全合格的路徑名

     %~dI        - 僅將 %I 擴展到一個驅動器號

     %~pI        - 僅將 %I 擴展到一個路徑

     %~nI        - 僅將 %I 擴展到一個文件名

     %~xI        - 僅將 %I 擴展到一個文件擴展名

     %~sI        - 擴展的路徑只含有短名

     %~aI        - 將 %I 擴展到文件的文件屬性

     %~tI        - 將 %I 擴展到文件的日期/時間

     %~zI        - 將 %I 擴展到文件的大小

     %~$PATH:I   - 查找列在路徑環境變量的目錄,並將 %I 擴展

                   到找到的第一個完全合格的名稱。如果環境變量名

                   未被定義,或者沒有找到文件,此組合鍵會擴展到

                   空字符串

 

可以組合修飾符來得到多重結果:

 

     %~dpI       - 僅將 %I 擴展到一個驅動器號和路徑

     %~nxI       - 僅將 %I 擴展到一個文件名和擴展名

     %~fsI       - 僅將 %I 擴展到一個帶有短名的完整路徑名

     %~dp$PATH:I - 搜索列在路徑環境變量的目錄,並將 %I 擴展

                   到找到的第一個驅動器號和路徑。

     %~ftzaI     - 將 %I 擴展到類似輸出線路的 DIR

 

在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法

用一個有效的 FOR 變量名終止。選取類似 %I 的大寫變量名

比較易讀,而且避免與不分大小寫的組合鍵混淆。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM