查看文章 |
二、tokens 假如只要歌手名和歌曲名,不要序号和后缀名,如何办到? 代码6:提取单列 @echo off for /f "tokens=2 delims=、." %%i in (歌曲列表.txt) do echo %%i pause>nul 运行结果将显示: 歌手名-歌曲名 饶天亮-玫瑰爱人 高一首-我不愿错过 黃凱芹-傷感的戀人 黄灿-黄玫瑰 黎姿-如此这般的爱情故事
讲解: 用delims定义顿号“、”和点号“.”作为分隔符,将原文分成三部分。 如第六行“5、黎姿-如此这般的爱情故事.mp3”被分割成: 第一部分(第一列):5 第二部分(第二列):黎姿-如此这般的爱情故事 第三部分(第三列):mp3 “tokens=2”表示用tokens提取第二列的字符串,即“黎姿-如此这般的爱情故事”。 没有被tokens定义提取的第一列和第三列将被忽略。
假如只要序号和歌曲名,而不要歌手名和后缀名,如何办到? 代码7:提取多列 @echo off for /f "tokens=1,3 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j pause>nul 运行结果将显示: 序号 歌曲名 1 玫瑰爱人 2 我不愿错过 3 傷感的戀人 4 黄玫瑰 5 如此这般的爱情故事
讲解: “delims=、-.”表示定义顿号、减号和点号为分隔符。 “tokens=1,3”表示只提取第一列和第三列。 “%%i %%j”对应于“token”后面的列数。有多少列就要有多少个输出变量,并且各变量中的字母存在先后顺序。
如何只提取文字,不要标点符号? 代码8:忽略分隔符 @echo off for /f "tokens=1,2-4 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j %%k %%l pause>nul 运行结果: 序号 歌手名 歌曲名 后缀名 1 饶天亮 玫瑰爱人 wma 2 高一首 我不愿错过 mp3 3 黃凱芹 傷感的戀人 MP3 4 黄灿 黄玫瑰 lrc 5 黎姿 如此这般的爱情故事 mp3
讲解: 默认情况下,用做分隔符的标点符号将被忽略。 “tokens=1,2-4”中的“2-4”表示第二至第四列。
三、小结
“For /f” 一句话总结:解析文本,读取字符串。
Delims的语法: FOR /F "Delims=符号集" %%I IN (Command1) DO Command2 一句话总结:忽略分隔符,切分字符串。
delims的意义包括两个方面: 第一、指定原文中的标点符号作为分隔符。使得文本被划分为许多小部分,方便使用批处理命令读取和编辑。 第二、读取第一个分隔符之前的内容。忽略第一个分隔符和分隔符后面的内容,如需读取和编辑,需要使用tokens等命令。
注意分隔符和标点符号的联系和区别。 分隔符就是原文中的标点符号,可以是一个标点符号也可以是多个。但原文中的标点符号不一定是分隔符。并且分隔符不一定是标点符号,字母和中文也是可以用作分隔符的。 分隔符需要定义,即用”delims=”来指定,等于号后面跟被用来做分隔符的标点符号,该标点符号来自原文。 当有多个标点符号被定义为分隔符时,标点符号之间没有空格。当用空格做分隔符时,空格应该放在其它用作分隔符的标点符号之后。 即使不使用delims,默认情况下,批处理也将空格作为分隔符。如文件名“Program Files”中含有空格时,批处理一般只读取空格前的“Program”,剩下的“Files”被忽略了。 例: 代码9:空格默认作为分隔符 @echo off for /f "delims=" %%a in ("伟大的中国人民万岁 万岁 万万岁") do echo %%a pause>nul 运行结果: 伟大的中国人民万岁 万岁 万万岁 讲解: “delims=”等号后面没有空格,代表取消默认以空格作为分隔符,相当于“tokens=*”,提取全部字符;等号后面有空格时表示定义空格为分隔符,此时delims可以省略。 批处理默认空格是分隔符,分隔符会隐藏第一个分隔符后面的所有内容。为了显示完整的信息,所以有必要取消该功能。 因此,当文件名或路径中含有空格时,需要用双引号括住。如果不使用双引号,括号内的内容将被当做文件名,如果文件名不存在,将提示“系统找不到……”。 如果不使用“delims=”,即使使用双引号,也只能显示第一个空格前面的字符串,后面的字符串将被默认忽略。
Tokens的语法: FOR /F "tokens=x,y,m-n" %%I IN (Command1) DO Command2 一句话总结:提取列。
Tokens的意义就是,提取指定的列。 注意列与句的联系与区别。 文本内容由许多文字字符串组成,它们被标点符号分隔,两个标点符号之间的语句我们称为“句子”。 当标点符号被“tokens=”指定为分隔符之后,文字将被分成多个部分。对应的每行的每个部分我们称之为“列”。 一列可能是一个句子,也可能包含多个句子,视delims定义的标点符号而定。 其它方面:关于“行”的提取,前面做过一个很简单的:
更详细的讲解请阅读《FOR入门与精通秘籍》。 |

