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]
for /參數(shù) %變量 in (集) do 命令 FOR分四種參數(shù) D L R F
一、參數(shù) /d for /d %%變量 in (集) do 命令 /d 參數(shù)是指定僅對目錄而不是文件執(zhí)行的for命令。
二、參數(shù) /R /R參數(shù)之后還可帶盤符及路徑 for /r 此處可以帶有路徑 %變量 in (集) do 命令 在/r 之后的那個路徑,指包含它之下的整個目錄樹(相當(dāng)于DOS命令tree里的范圍)中的所有目錄,如果僅為一個英文句點 . ,是指當(dāng)前路徑下的目錄樹,如果省略了路徑則特指當(dāng)前目錄,而之后的in (集)則相當(dāng)于與前面每個目錄相配的文件集 這里按in(集)中有無通配符分兩種情況 1) in(集)中沒有通配符 指定的是單個文件或列舉的具體文件(多個文件名之間用分隔符分隔,如空格、逗號等) 例2 @echo of for /r . %i in (abc.txt) do echo. > %i echo on 注:這里for /r 后的路徑僅有一個 . 而后面每個循環(huán)中echo. > %i相當(dāng)于創(chuàng)建一個僅有一空行的文本文件,整體效果是在當(dāng)前目錄下包括子錄,每個目錄中建一個abc.txt。 例3 (放入批處理中) @echo off rem 顯示d:盤中所有文件名為file1和file2的列表 for /r d:\ %%h in (file1,file2) do if exist%%h echo %%h pause 2) in(集)中含有通配符*或? 這種里面的do命令將處理前面 /r指定的目錄系列里每個含有in(集)中文件的項,而不去理會不含有相配文件的那些目錄 例4: @echo off rem 刪除C盤中所有*.chk的文件 for /r c:\ %%h in (*.chk) do del /q %%h pause 注:del /q 表示用安靜模式刪除(不需確認) 三、參數(shù) /L for /L%%變量 in (起始值,每次增值,結(jié)束時的比較值) do 命令 (上面L也可用小寫,主要為了視覺上不與數(shù)字1混淆而沒用小寫) (起始值,每次增值,結(jié)束時的比較值)相當(dāng)于一個等差數(shù)字序列,從“起始值”的數(shù)字開始,每次增加多少(也可設(shè)定為負數(shù))為“每次增值”,并與“結(jié)束時的比較值”比較,超出則退出for循環(huán)(也不執(zhí)行本輪后面的do 命令) 例如 (1,1,3) 將產(chǎn)生序列 (1 2 3);(1,2,9)將產(chǎn)生序列(1 3 5 7 9);(5,-1,1) 將產(chǎn)生序列 (5 4 3 2 1);(1,3,18)將產(chǎn)生序列(1 7 10 13 16) 例5 @echooff ::在D盤建立aa1~ aa5五個文件夾 for /L%%i in (1,1,5) do md d:\aa %%i pause
總結(jié)及提示: for 命令的實際用法基本上已終結(jié),但是僅此是不能寫出強大功能的批處理的,它只是一條DOS命令,需要熟練一些其他的DOS命令和Windows系統(tǒng)提供的命令,組合運用,才能充分發(fā)揮其強大、實用的功能,使得一些復(fù)雜事情,處理起來意想不到的簡潔方便。
附:常見在批處理for命令中需要的一個的命令或者叫環(huán)境設(shè)置: for命令實際上是會作循環(huán),如果在每輪的命令中改變某環(huán)境變量值,在默認狀態(tài),一條for命令用%環(huán)境變量%只取一次值的,那么下輪循環(huán)中再用時還是改變前的值(包括do后面帶有括號里的多條命令的執(zhí)行期間),就沒達到預(yù)期目的,為此,引入下面命令: setlocal enabledelayedexpansion 開始批處理文件中環(huán)境改動的本地化操作,并啟動延緩環(huán)境變量擴展。在執(zhí)行SETLOCAL 達到批處理文件結(jié)尾時,對于該批處理文件的每個尚未執(zhí)行的 setlocal 命令,都會有一個隱含的 endlocal 被執(zhí)行。 在取變量值時,用!變量名!可以動態(tài)取值,延遲環(huán)境變量擴充允許您使用一個不同的字符(驚嘆號)在執(zhí)行時間擴充環(huán)境變量。這個用法實際是屬于在批處理中所有復(fù)合型命令都需要注意的。如果批處理結(jié)束后不希望將改變的環(huán)境保留,建議總是加上setlocal 。 要是結(jié)合一些其他復(fù)雜些的有關(guān)系統(tǒng)的、網(wǎng)絡(luò)的命令(如wmic、net)進來,那才是方顯FOR英雄本色,比如遍歷本地磁盤可以用命令:wmic logicaldiskwhere "drivetype=3" get name 顯然要在所有磁盤里查找某文件并作相應(yīng)操作就很容易了,用好for命令也是需要其他命令和計算機基礎(chǔ)配合的。呵呵,本人水平有限,寫的只是低級層次的...但愿能對有緣來這里看的初學(xué)DOS的FOR命令者有所幫助。
DOS for 實例
格式:FOR [參數(shù)] %%變量名 IN (相關(guān)文件或命令) DO 執(zhí)行的命令 作用:對一個或一組文件,字符串或命令結(jié)果中的每一個對象執(zhí)行特定命令,達到我們想要的結(jié)果。 注意:在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable,而不要用 %variable。變量名稱是區(qū)分大小寫的,所以 %i 不同于 %I. 關(guān)于:for命令可以帶參數(shù)或不帶參數(shù),帶參數(shù)時支持以下參數(shù):/d /l /r /f 下面分別解釋一下
=== 零:無參數(shù)時: --- FOR %variable IN (set) DO command [command-parameters] %variable 指定一個單一字母可替換的參數(shù)。 (set) 指定一個或一組文件??梢允褂猛ㄅ浞? command 指定對每個文件執(zhí)行的命令。 command-parameters 為特定命令指定參數(shù)或命令行開關(guān)。
TTT示例: for %%i in (t*.*) do echo %%i --顯示當(dāng)前目錄下與t*.*相匹配的文件(只顯示文件名,不顯示路徑) for %%i in (d:\mydocuments\*.doc) do @echo %%i --顯示d:\mydocuments\目錄下與*.doc相匹配的文件
=== 一、參數(shù) /d (參數(shù)只能顯示當(dāng)前目錄下的目錄名字) --- 格式:FOR /D %variable IN (set) DO command [command-parameters] 這個參數(shù)主要用于目錄搜索,不會搜索文件,/D 參數(shù)只能顯示當(dāng)前目錄下的目錄名字。(TTT特別說明:只會搜索指定目錄下的目錄,不會搜索再下一級的目錄。)
TTT示例: for /d %%i in (c:\*) do echo %%i --顯示c盤根目錄下的所有目錄 for /d %%i in (???) do echo %%i --顯示當(dāng)前目錄下名字只有1-3個字母的目錄
=== 二、參數(shù) /R (搜索指定路徑及所有子目錄中與set相符合的所有文件) --- 格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 此命令會搜索指定路徑及所有子目錄中與set相符合的所有文件,注意是指定路徑及所有子目錄。
1、set中的文件名如果含有通配符(?或*),則列舉/R參數(shù)指定的目錄及其下面的所用子目錄中與set相符合的所有文件,無相符文件的目錄則不列舉。 2、如果set中為具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的所有子目錄)(并在后面加上具體的文件名),而不管set中的指定文件是否存在。 例:for /r c:\ %%i in (*.exe) do echo %%i --把C盤根目錄,和每個目錄的子目錄下面全部的EXE文件都列出來了!!!!
TTT示例: for /r c:\ %%i in (boot.ini) do echo %%i --枚舉了c盤所有目錄 for /r d:\backup %%i in (1) do echo %%i --枚舉d\backup目錄 for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i --很好的搜索命令,列舉boot.ini存在的目錄
=== 三、參數(shù) /L (該集表示以增量形式從開始到結(jié)束的一個數(shù)字序列??梢允褂秘摰?Step) --- 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters] 該集表示以增量形式從開始到結(jié)束的一個數(shù)字序列??梢允褂秘摰?Step
TTT示例: for /l %%i in (1,1,5) do @echo %%i --輸出1 2 3 4 5 for /l %%i in (1,2,10) do @echo %%i --輸出1,3,5,7,9 for /l %%i in (100,-20,1) do @echo %%i --輸出100,80,60,40,20 for /l %%i in (1,1,5) do start cmd --打開5個CMD窗口 for /l %%i in (1,1,5) do md %%i --建立從1~5共5個文件夾 for /l %%i in (1,1,5) do rd /q %%i --刪除從1~5共5個文件夾