在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 的大寫變數名
比較易讀,而且避免與不分大小寫的組合鍵混淆,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/27224.html
標籤:Windows
