FOR参数F的选项delims与tokens下

二、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=”代表取消默认以空格作为分隔符。

批处理默认空格是分隔符,分隔符会隐藏第一个分隔符后面的所有内容。为了显示完整的信息,所以有必要取消该功能。

因此,当文件名或路径中含有空格时,需要用双引号括住。如果不使用双引号,括号内的内容将被当做文件名,如果文件名不存在,将提示“系统找不到……”。

如果不使用“delims=”,即使使用双引号,也只能显示第一个空格前面的字符串,后面的字符串将被默认忽略。

Tokens的语法:

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

一句话总结:提取列。

Tokens的意义就是,提取指定的列。

注意列与句的联系与区别。

文本内容由许多文字字符串组成,它们被标点符号分隔,两个标点符号之间的语句我们称为“句子”。

当标点符号被“tokens=”指定为分隔符之后,文字将被分成多个部分。对应的每行的每个部分我们称之为“列”。

一列可能是一个句子,也可能包含多个句子,视delims定义的标点符号而定。

其它方面:关于“行”的提取,前面做过一个很简单的:
@echo off
findstr /n .* 12.txt>>122.txt
set /p m=请输入要定位的行:
findstr /b "%m%" 122.txt
pause

更详细的讲解请阅读《FOR入门与精通秘籍》。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值