批处理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=:,。”将其屏蔽掉。