1. 程式人生 > 其它 >批處理-for /f 引數詳解

批處理-for /f 引數詳解

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就會把它當字串來迴圈,而不是文字.