for /f 參數詳解
例一:
for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c
pause
先從引號內的參數講起.
skip=
tokens=
delims=
這三項是用的最多的,根據需要.可以不用,可以一起使用,也可以只使用一個或兩個.
但是不管使用幾個都要用引號將它們擴起來.當然不使用時,自然就不需要引號了.
skip=
for循環文本內容是以行為單位,從上至下進行的,skip=1意識就是跳過文本的第一行,即不循環第一行
那么skip=2 自然就是跳過前兩行了,依次類推.........
delims=
先講這句
delims=后面的字符的意識是,將文本每一行的內容以delims=后面的字符分割成若干列.
假設a.txt某一行的內容是 111,222.333 444/555
我們用下面的語句
例二:
for /f "tokens=1-5 delims=,./ " %%a in (a.txt) do echo %%a %%b %%c %%d %%e
pause
顯示結果是 111 222 333 444 555
解釋:
意識就是把111,222.333 444/555
以,./
和空格(不分先后)分成了5列.注意代碼中/和"后面有個空格,
使用中要注意空格要放到最后,如"delims=,. /"
這樣就不行了.
那如果我們不使用逗號來分割會如何呢?如: "delims=./ "
那么就會分割成111,222 333 444 555
看出區別了嗎?delims=
后面可以是多個字符,可以是空格,也可以什么都沒有.
什么都沒有代表什么呢?就是不以任何東西為分割符,也是整行的內容了.
因為for默認是以,;和空格作分割符的,
所以一般要取得整行內容通常會用"delims="這樣的形式來取消for的默認分割符.
tokens=``tokens=1-5
1-5很好理解就1至5,前面我們用delims=后面的字符為分割符,將文本內容分成了多列,那么你需要的是哪些列呢?
用tokens=可以很好幫你提取到.
還是以例二為例:
通過dilims=,./
將文本分成了111 222 333 444 555
五列.
注意代碼中前面有個%%a 這里的%%a就是代表第一列,第二列就是%%b,第三列就是%%c 依此類推.....
那么我們如果把echo %%a %%b %%c %%d %%e
改為 echo %%e %%d %%c %%b %%a
會如何呢?
當然.會顯示 555 444 333 222 111
如果是:echo %%b %%d
又會顯示什么呢? 不用我說了吧!
若是第一個%%a
把它改為%%i
也是一樣,那么第二列就是%%j...%%k...
依此類推....
明白了?就是按英文字母的順序依此類推的.
這里我們用的是tokens=1-5
但是在例一中,我們用的是tokens=1,2*
有什么區別呢?
其實差不多-號代表從幾至幾而逗號代表單一的,如 tokens=1,5就是代表第一列和第五列,而不是1至5列.
*號代表剩下的所有的列.如:tokens=1,2*
代表%%a
為第一列,%%b
為第二列,%%c
代表后面所有的列.
for /f
不但可以循環文本內容還可以循環字符竄,如:
例三:
for /f "tokens=1-3 delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
pause
只要將()里的字符串用引號擴起來,for就會把它當字符串來循環,而不是文本.