批處理-for /f 引數詳解
阿新 • • 發佈:2021-12-23
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就會把它當字串來迴圈,而不是文字.