tokens和delims都是Windows批处理中for /f命令的重要参数,它们经常一起使用来解析文本和提取特定信息。
tokens
• 作用:tokens负责提取字符串,也就是提取通过delims分隔的列内容。
• 用法:
• tokens=x:表示提取第x列。
• tokens=x,y:表示提取第x列和第y列。
• tokens=x-n:表示提取第x列至第n列。
• tokens=*:表示提取全部列,或者删除每行前面的空格(忽略行首的所有空格)。
• tokens=m*或tokens=m,*:表示提取第m列以后的所有字符,星号表示剩余的字符。
• 注意:输出变量的个数由定义了的tokens决定。在FOR语句中显式声明%%i,使用tokens=可以隐式声明%%j、%%k等后续变量,只要不会引起试图声明高于字母“z”或“Z”的某个变量,则最多可以指定26个输出变量。
delims
• 作用:delims用于定义分隔符,指定如何分割文件中的文本,它忽略(隐藏)分隔符,并以定义的分隔符来切分字符串。
• 用法:delims=符号集,符号集指用做分隔符的标点符号,可以是一个,也可以是多个,当定义多个分隔符时,符号之间不用空格。如果分隔符后面还有内容,默认该分隔符与该内容将被一同忽略,除非使用tokens定义显示。
• 注意:
• 分隔符就是用delims指定的标点符号,该标点符号必须原本就存在于文本中,但文本中的标点符号不一定都要作为分隔符,只有被delims指定的才会起作用。
• for /f命令默认空格和制表符为分隔符,当使用delims指定了新的分隔符后,会替换掉默认的空格和制表符分隔符集。如果需要用空格作为分隔符,且存在其他分隔符时,应把空格放在最后面。
• 被定义的分隔符前后的内容将变成独立的小节(或列),这些小节可以为for命令编辑,比如使用tokens提取。
示例讲解
假设有一个名为“歌曲列表.txt”的文本文件,内容如下:
序号、歌手名-歌曲名.后缀名
1、饶天亮-玫瑰爱人.wma
2、高一首-我不愿错过.mp3
3、黃凱芹-傷感的戀人.MP3
4、黄灿-黄玫瑰.lrc
5、黎姿-如此这般的爱情故事.mp3
• 如果想要提取序号,可以使用以下命令:
@echo off
for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i
pause>nul
这里delims=、表示定义顿号“、”为分隔符,并用该分隔符“、”切分文本字符串,因为默认只显示第一个分隔符前的内容,所以提取出了序号。
• 如果想要提取歌手名和歌曲名,可以使用以下命令:
@echo off
for /f "tokens=2 delims=、." %%i in (歌曲列表.txt) do echo %%i
pause>nul
这里delims=、.定义顿号“、”和点号“.”作为分隔符,将原文分成三部分,然后使用tokens=2提取第二列的字符串,即“歌手名-歌曲名”。
• 如果想要同时提取序号和歌曲名,可以使用以下命令:
@echo off
for /f "tokens=1,3 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j
pause>nul
这里delims=、-.表示定义顿号“、”、减号“-”和点号“.”三个标点符号为分隔符,将原文分隔成四部分,然后使用tokens=1,3提取第一列和第三列,即序号和歌曲名。
总的来说,tokens和delims是for /f命令中非常有用的参数,它们可以帮助用户高效地解析文本和提取所需信息。