個人自己總結(jié), 參考了英雄的部分資料,很粗糙,有什么不足,大家補(bǔ)正!
復(fù)制內(nèi)容到剪貼板
代碼:
for語句總結(jié)
1、for 后面沒有任何參數(shù)
set str=a b c
set str=a,b,c
set str=a=b=c
set str=a;b;c
for %%i in (%str%) do echo %%i
四種符號相隔abc: 空格、逗號、等號、分號
2、for /l
for /l %%i in (1 1 100) do echo %%i
for /l %%i in (100 -1 1) do echo %%i
(1 1 100) (1,1,100) (1;1;100) (1=1=100)
四種符號相隔1 1 100: 空格、逗號、等號、分號
3、for /f
for /f ["option"] %%i in (filename) do command
for /f ["option"] %%i in ("string") do command
for /f ["option"] %%i in (''command'') do command
option: eol=c 忽略以c開頭的行,默認(rèn)忽略 ;開頭的行
skip=n 忽略前n行
delims=xxx 以 每個 x 為分隔符,默認(rèn)以空格為分隔符
tokens=x,y,m-n 提取分隔后的第幾部分,和delims聯(lián)合用,默認(rèn)提取第一部分
usebackq 一種特殊用法(見后面)
當(dāng)option為usebackq時,用法如下:
for /f "usebackq" %%i in ("filename") do command
for /f "usebackq" %%i in (''string'') do command
for /f "usebackq" %%i in (`commamd`) do command
有人會問,這個參數(shù)究竟有什么作用?
答:當(dāng)你要解析的文件的路徑中帶有空格,比如你要解析的文件路徑為C:\Documents and Settings\Administrator\桌面\hero.txt。
如果不用usebackq參數(shù),你將得不到正確的結(jié)果。
如果你這樣寫的話
@echo off
for /f %%i in ("C:\Documents and Settings\Administrator\桌面\hero.txt") do echo %%i
pause
結(jié)果只是解析了一個字符串而不是文件。
如果你這樣寫的話
@echo off
for /f %%i in (C:\Documents and Settings\Administrator\桌面\hero.txt) do echo %%i
pause
結(jié)果會提示找不到C:\Documents。
而如果這樣寫
@echo off
for /f "usebackq" %%i in ("C:\Documents and Settings\Administrator\桌面\hero.txt") do echo %%i
pause
你就可以得到正確的結(jié)果。
4、for /r
for命令中的“/r”參數(shù)是個比較有用的參數(shù),下面將具體講解。
基本格式:FOR /r 路徑 %%variable in (set) do something
檢查以“路徑”為根的目錄樹。如果在 /r 后沒有指定目錄,則使用當(dāng)前目錄。
如果集(set)為一個單點(diǎn)(.)字符,則枚舉該目錄樹。
例1:
顯示出c盤下所有的txt文件。
@echo off
for /r c:\ %%i in (*.txt) do echo %%i
pause
例2:
枚舉當(dāng)前目錄下的所有子目錄及子目錄的目錄……
@echo off
for /r %%i in (.) do echo %%i
pause
不過在所得的目錄后面都會帶一個“.”。
例3:
在當(dāng)前目錄的父目錄中尋找txt文件。
@echo off
for /r .. %%i in (*.txt) do echo %%i
pause
解說:本例中的“..”代表當(dāng)前目錄的父目錄。
例4:
在論壇中常有人這樣寫
@echo off
for /r . %%i in (*.txt) do echo %%i
pause
這里的“.”可以去掉,表示的是當(dāng)前目錄。
“/r”參數(shù)還有一些地方需要我們注意--集(set)中的元素會被識別為字符串而
非文件名除非有通配符修飾。
例5:
@echo off
for /r %%i in (hero.txt) do echo %%i
pause
這里的hero.txt不會被識別為文件名,而僅僅被識別為字符串。如果你想在指定
的目錄中搜索文件hero.txt,請看下兩個例子。
例6:
@echo off
for /r %%i in (*hero.txt) do echo %%i
pause
本例中由于有通配符“*”,故“*hero.txt”被識別為文件名。
例7:
@echo off
for /r %%i in (hero.txt) do if exist %%i echo %%i
pause
這樣我們就可以找到真正存在的hero.txt文件了。
5、for /d
基本格式:FOR /d %%variable in (set) do something
如果集(set)中包含通配符,則識別為目錄名,否則將被識別為字符串。
作用是--遍歷當(dāng)前目錄下(set)中所指定的目錄。
例1:
@echo off
for /d %%i in (hero) do echo %%i
pause
本例中由于集(hero)中不含有通配符,故“hero”僅僅被識別為字符串。
例2:
@echo off
for /d %%i in (*hero) do echo %%i
pause
本例中由于集(*hero)中含有通配符*,故“*hero”被識別為文件名,結(jié)果
遍歷了當(dāng)前目錄下所有與*hero匹配的目錄。
6、FOR 變量參照的替換已被增強(qiáng)。您現(xiàn)在可以使用下列選項(xiàng)語法:
~I - 刪除任何引號("),擴(kuò)充 %%I
%%~fI - 將 %%I 擴(kuò)充到一個完全合格的路徑名
%%~dI - 僅將 %%I 擴(kuò)充到一個驅(qū)動器號
%%~pI - 僅將 %%I 擴(kuò)充到一個路徑
%%~nI - 僅將 %%I 擴(kuò)充到一個文件名
%%~xI - 僅將 %%I 擴(kuò)充到一個文件擴(kuò)展名
%%~sI - 擴(kuò)充的路徑只含有短名
%%~aI - 將 %%I 擴(kuò)充到文件的文件屬性
%%~tI - 將 %%I 擴(kuò)充到文件的日期/時間
%%~zI - 將 %%I 擴(kuò)充到文件的大小
%%~$PATH:I - 查找列在路徑環(huán)境變量的目錄,并將 %%I 擴(kuò)充
到找到的第一個完全合格的名稱。如果環(huán)境變量名
未被定義,或者沒有找到文件,此組合鍵會擴(kuò)充到
空字符串
可以組合修飾符來得到多重結(jié)果:
%%~dpI - 僅將 %%I 擴(kuò)充到一個驅(qū)動器號和路徑
%%~nxI - 僅將 %%I 擴(kuò)充到一個文件名和擴(kuò)展名
%%~fsI - 僅將 %%I 擴(kuò)充到一個帶有短名的完整路徑名
%%~dp$PATH:i - 查找列在路徑環(huán)境變量的目錄,并將 %%I 擴(kuò)充
到找到的第一個驅(qū)動器號和路徑。
%%~ftzaI - 將 %%I 擴(kuò)充到類似輸出線路的 DIR
這里只給出一個例子,具體的讀者可以在實(shí)際應(yīng)用中細(xì)細(xì)體會。
例:
@echo off
for /r %%i in (*.txt) do echo %%~zi %%~ni
pause
結(jié)果:顯示當(dāng)前目錄及其子目錄下的所有txt文檔,左半部分顯示文件的大小,右半部分是文件名(不包含擴(kuò)展名)。
解說:“%%~zi”代表文件的大小,“%%~ni”代表文件名(不包含擴(kuò)展名)。
加上~,去掉雙引號
f:全路徑
d:盤符(d:driver)
p:相對路徑
n:名字(n:name)
x:擴(kuò)展名(x:extension)
s:全路徑的短名,例如:C:\DOCUME~1\ADMINI~1\
a:文件屬性,(a:attrib)
t:文件的日期、時間(t:date、time)
z:文件大小(z:size)
例:
@echo off
echo %0
echo %~0
echo %~f0
echo %~d0
echo %~p0
echo %~n0
echo %~x0
echo %~s0
echo %~a0
echo %~t0
echo %~z0
echo %~dp0
echo %~nx0
echo %~fs0
pause