批處理 for參數之token詳解


tokens=x,y,m-n 提取列

格式:

FOR /F "tokens=x,y,m-n" %%I       IN (Command1)   DO Command2

用法:

一句話總結:提取列。

通俗講,共同提取每一行的第m小節的內容。

因此,可以用該命令來指定提取文本信息。

tokens=有時表示提取全部。

tokens=m表示提取第m列。

tokens=m,n表示提取第m列和第n列。

tokens=m-n表示提取第m列至第n列。

Tokens=*表示刪除每行前面的空格。忽略行首的所有空格。

tokens=m*提取第m列以后的所有字符,星號表示剩余的字符。

tokens=m,*提取第m列以后的所有字符,星號表示剩余的字符。

輸出變量的個數由定義了的tokens決定。

在 FOR 語句中顯式聲明 %%i。使用tokens= 隱式聲明%%j 和%%k。只要不會引起試圖聲明高於字母“z”或“Z”的某個變量,則使用tokens= 可以指定最多 26 個輸出變量。

接着前面的例子“靜夜思”。

如果我要提取第三小節“舉頭望明月”,如何做到?

@echo off

for /f   "delims=, tokens=3"   %%i in (靜夜思.txt) do echo %%i 

pause>nul

講解:

首先用delims=,表示命令要用逗號作為詩句的分隔符將四句分成四小節。然后用tokens=3提取第三小節,即“舉頭望明月”了。

delims=和tokens=共用一對雙引號,如果單獨用雙引號,則FOR命令返回的只能是它們之中的一個。因為在第一節說過,FOR是逐一讀取命令的,將delims和tokens分開后,FOR只能一次讀取一個,不能一次全部讀取。

注意:

Tokens常和delims一起使用。

首先,一行內容被delims用分割符號如逗號等分隔成許多小段或小節。

然后,tokens才能提取每行之間對應的這些小段或小節——列。具體看下面例子。

例:提取前面例子文本“a.txt”中每行的第三段內容“ccc”、“kkk”、“ggg”、“考試”。

@echo off

for /f "skip=1 delims=,, tokens=3" %%i in (a.txt) do echo %%i 

pause>nul

注意:為什么kkk不出現呢?

例:如何屏蔽掉文本“a.txt”中的標點符號?

@echo off

for /f "skip=1delims=,, tokens=1-4" %%i in (a.txt) do echo %%i %%j %%k %%l

pause>nul

講解:

%%i %%j %%k %%l是輸出變量,它的個數由tokens后面的(m-n)決定,一般有(n-m+1)個,但不能超過Z。

並且%%后面的字母存在先后順序,%%a %%b是順向,倒過來則是逆向的。

代行號的tokens=m*,星號表示m后面的所有剩余的列。

例:

for /f "tokens=*"   %%i in (a.txt) do echo %%i 

講解:

沒有指定具體的列,"tokens=*"將

提取全部列,后面只需一個輸出變量%%i。

例:

for /f "tokens=2*"   %%i in (a.txt) do echo %%i %%j

講解:

"tokens=2*"提取第二列以后的所有字符,星號表示剩余的字符。輸出變量%%i對應於2的輸入變量,%%j對應於星號的輸入變量。

注意:

這里沒有使用delisms但卻以空格分隔了,是因為FOR默認空格是做分隔符的。

例:屏蔽掉“易經.txt”中的標點符號: 

@echo off

for /f "tokens=1-5 delims=:," %%a in (易經.txt) do echo %%a %%b %%c %%d %%e

pause>nul

講解:

當delims定義了兩個分隔符“:”和“,”時,提取列要用到tokens。

有五個列,所以tokens要定義提取第一列至第五列,即1-5,相應地,后面需要五個輸出顯示變量%%a %%b %%c %%d %%e。你也可以這樣修改,避免過多的變量符號【補充?】

你也可以將最后多余的句號定義為分隔符“delims=:,。”將其屏蔽掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM