對一組文件中的每個文件運行指定的命令。
可以在批處理文件中或直接從命令提示符使用 for 命令。
下列屬性適用于 for 命令:
Set 參數(shù)可以代表單個或多個文件組??梢允褂猛ㄅ浞?* 和 ?)指定文件組。以下為有效文件組:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令時,Set 中的第一個值代替 %Variable 或 %%Variable,然后由指定的命令處理該值。這會持續(xù)到處理完與 Set 值相對應的所有文件(或文件組)為止。
In 和 do 不是參數(shù),但必須將它們與 for 一起使用。如果省略其中任何一個關鍵字,就會出現(xiàn)錯誤消息。
如果啟用命令擴展(這是默認設置),則支持 for 的下列其他格式:
如果 Set 包含通配符(* 和 ?),將對與 Set 相匹配的每個目錄(而不是指定目錄中的文件組)執(zhí)行指定的 Command。語法是:
for /D {%% | %} Variable in (Set) do Command [CommandLineOptions]
進入根目錄樹 [Drive:]Path,在樹的每個目錄中執(zhí)行 for 語句。如果在 /R 后沒有指定目錄,則認為是當前目錄。如果 Set 只是一個句點 (.),則只枚舉目錄樹。語法是:
for /R [[Drive :]Path] {%% | %} Variable in (Set) do Command [CommandLineOptions]
使用迭代變量設置起始值 (Start#),然后逐步執(zhí)行一組范圍的值,直到該值超過所設置的終止值 (End#)。/L 將通過對 Start# 與 End# 進行比較來執(zhí)行迭代變量。如果 Start# 小于 End#,就會執(zhí)行該命令。如果迭代變量超過 End#,則命令解釋程序退出此循環(huán)。還可以使用負的 Step# 以遞減數(shù)值的方式逐步執(zhí)行此范圍內(nèi)的值。例如,(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]
使用文件解析來處理命令輸出、字符串及文件內(nèi)容。使用迭代變量定義要檢查的內(nèi)容或字符串,并使用各種 ParsingKeywords 選項進一步修改解析方式。使用 ParsingKeywords href="HELP=glossary.hlp TOPIC=token">令牌選項指定哪些令牌應該作為迭代變量傳遞。請注意:在沒有使用令牌選項時,/F 將只檢查第一個令牌。
文件解析過程包括讀取輸出、字符串或文件內(nèi)容,將其分成獨立的文本行以及再將每行解析成零個或更多個令牌。然后通過設置為令牌的迭代變量值,調(diào)用 for 循環(huán)。默認情況下,/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 參數(shù)指定一個或多個文件名稱。每個文件都將被打開、讀取和處理,然后再繼續(xù)執(zhí)行 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 | 指定在文件的開頭跳過的行數(shù)。 |
delims=xxx | 指定分隔符集合。這將替換空格和制表符這一默認分隔符集。 |
指定將哪些令牌從每行傳遞到每個迭代的 for 正文。這樣就分配了附加變量名稱。M-N 格式是一個范圍,指定從第 M 個到第 N 個令牌。如果 tokens= 字符串中最后一個字符是星號 (*),那么將分配另外的變量,并接收解析的最后一個令牌之后該行剩余的文本。 | |
usebackq | 指定可以使用引號引用 FileNameSet 中的文件名,將后面帶有引號的字符串作為一個命令執(zhí)行,而帶有單引號的字符串是文字字符串命令。 |
已經(jīng)增強了 for 變量引用的替換修飾符。下表列出可選語法(對于任意變量 I)。
描述 | |
---|---|
%~I | 展開 %I,刪除任何前后引號 ("")。 |
%~fI | 將 %I 展開為完全限定的路徑名。 |
%~dI | 只將 %I 展開到驅(qū)動器號。 |
%~pI | 只將 %I 展開到路徑。 |
%~nI | 只將 %I 展開到文件名。 |
%~xI | 只將 %I 展開到文件擴展名。 |
%~sI | 展開路徑只包含短名稱。 |
%~aI | 將 %I 展開到文件的文件屬性。 |
%~tI | 將 %I 展開到文件的日期和時間。 |
%~zI | 將 %I 展開到文件的大小。 |
%~$PATH:I | 搜索 PATH 環(huán)境變量所列出的目錄,并將 %I 展開到第一個找到的完全限定的名稱。如果沒有定義環(huán)境變量名稱,或通過搜索沒有找到文件,則此修飾符將擴展成空字符串。 |
下表列出了可用來獲得復合結(jié)果的修飾符組合。
描述 | |
---|---|
%~dpI | 只將 %I 展開到驅(qū)動器號和路徑。 |
%~nxI | 只將 %I 展開到文件名和擴展名。 |
%~fsI | 將 %I 展開到只包含短名稱的完整路徑名。 |
%~dp$PATH:I | 在 PATH 環(huán)境變量中所列出的目錄中搜索 %I,并將其展開到第一個找到的驅(qū)動器號和路徑。 |
%~ftzaI | 將 %I 展開到輸出行(如 dir 一樣)。 |
在上述示例中,可以用其他有效值替換 %I 和 PATH。有效的 for 變量名終止
使用大寫變量名(例如 %I),可以使代碼更具可讀性,并且避免與不區(qū)分大小寫的修飾符混淆。
通過將 FileNameSet 用單引號括起來,(即 'FileNameSet'),可以使用 for /F 對直接字符串進行邏輯解析。系統(tǒng)將 FileNameSet 視為從某個文件輸入的單行,然后對其進行解析。
通過將圓括號內(nèi)的 FileNameSet 變?yōu)楹竺鎺в幸柕淖址?,可以利?for /F 命令解析命令輸出。此命令被視為命令行傳遞給子命令 Cmd.exe,并將輸出捕獲到內(nèi)存并進行解析,就象它是一個文件一樣。
要在批處理文件中使用 for,請使用以下語法:
for %%Variable in (Set) do Command [CommandLineOptions]
要通過使用可替換變量 %f 顯示當前目錄中擴展名為 .doc 或 .txt 的所有文件的內(nèi)容,請鍵入:
for %f in (*.doc *.txt) do type %f
在前述示例中,當前目錄中擴展名為 .doc 或 .txt 的每個文件都被替代為變量 %f,直到每個文件的內(nèi)容都被顯示出來為止。要在批處理文件中使用此命令,請使用 %%f 替換所有的 %f。否則,系統(tǒng)將忽略該變量并顯示一條錯誤消息。
要解析文件,同時忽略注釋行,請鍵入:
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。否則,引號將被解釋為定義要解析的文字字符串。
在 FOR 語句中顯式聲明 %i。使用 tokens= 隱式聲明 %j 和 %k。只要不會引起試圖聲明高于字母“z”或“Z”的某個變量,則使用 tokens= 可以指定最多 26 個令牌。
要通過將 FileNameSet 放在括號中間來解析命令輸出,請鍵入:
這個示例枚舉了當前環(huán)境中的環(huán)境變量名。
格式 | 含義 |
---|---|
斜體 | 用戶必須提供的信息 |
粗體 | 用戶必須準確鍵入的要顯示的元素 |
省略號 (...) | 在命令行中可多次重復的參數(shù) |
中括號 ([]) | 可選項 |
大括號 ({});選項用豎線 (|) 分隔。例如:{even|odd} | 用戶必須從選項集合中選擇一個 |
Courier 字體 | 代碼或程序輸出 |