批处理教程之FOR的参数/F之delims详解

发布时间:2020-12-20编辑:脚本学堂
本文介绍下,批处理中for命令参数/f下的delims的详细用法,有需要的朋友,可以参考下。

delims=符号集 分隔符

格式:
FOR /F "Delims=符号集" %%I       IN (Command1)   DO Command2
用法:
总结:忽略分隔符,切分字符串。
1)以文本中的标点符号来定义分隔符。分隔符通常就是空格键和跳格键。
2)被定义为分隔符的标点符号将被忽略(隐藏),如果分隔符后面还有内容,默认该分隔符与该内容将被一同忽略,除非使用tokens定义显示。因此,该命令可以用来屏蔽标点符号和提取第一列的信息。
3)被定义的分隔符前后内容将变成独立的小节(或列),这些小节可以为FOR命令编辑,比如使用tokens提取。
 
注意:
符号集,指用做分隔符的标点符号可以是一个,也可以是多个。
当delims定义多个分隔符时,符号之间不用空格,用做分隔符的空格要放到最后。
 
首先要弄清楚分隔符。分隔符就是用delims指定的标点符号了,该标点符号就是文本中的标点符号。注意:这里的分隔符并非文本中的所有标点符号,而是指被delims指定的标点符号。如下图
其次要弄清楚分节、分列。我们把每行两个分隔符之间的文字内容称为小节、列。注意:是分隔符之间,而非标点符号之间。如下图。
 
例:《易经·乾》的开头:
  乾:元,亨,利,贞。
       初九:潜龙,勿用。
       九二:见龙再田,利见大人。
       九三:君子终日乾乾,夕惕若,厉无咎。
       九四:或跃在渊,无咎。
       九五:飞龙在天,利见大人。
       上九:亢龙有悔。
       用九:见群龙无首,吉。
将该内容保存到为文本文件“易经.txt”,下面我们做实验。
 
如果使用Delims来定义分隔符,你可以使用原文中的冒号(:),写法是“Delims=:”(使用英文双引号)。冒号作为分隔符后,冒号前后的内容被分成两个小节:
 
第一小节(列)
分隔符
第二小节(列)
第一行


元,亨,利,贞。
第二行
初九

潜龙,勿用。
第三行
九二

见龙再田,利见大人。
第四行
九三

君子终日乾乾,夕惕若,厉无咎。
第五行
九四

或跃在渊,无咎。
第六行
九五

飞龙在天,利见大人。
第七行
上九

亢龙有悔。
第八行
用九

见群龙无首,吉。
备注:
默认只显示第一列
默认忽略分隔符
默认忽略第一个分隔符后的内容
 
代码:
 

复制代码 代码示例:
@echo off
for /f "delims=:" %%a in (易经.txt) do echo %%a
pause>nul
 

运行结果将显示第一小节(列)的内容。
原因是没有定义显示的列,默认情况下忽略第一个分隔符(冒号)后面的内容。
 
要显示列,需要用到下节学习的tokens。如:
 

复制代码 代码示例:
@echo off
for /f "tokens=1,2 delims=:" %%a in (易经.txt) do echo %%a %%b
pause>nul

也可以使用冒号(:)和逗号(,),写法是“delims=:,”(使用英文双引号)。原文中的每行文字将被作为分隔符的冒号和逗号分成多个小节:(不知道百度怎么搞的,竟然说我的表格超载!省略了)
代码:
 

复制代码 代码示例:
@echo off
for /f "delims=:," %%a in (易经.txt) do echo %%a
pause>nul
 

运行结果将显示第一小节(列)的内容。
没有定义列的时候,默认只显示第一列,忽略分隔符和第一个分隔符后的内容。
 
例如:文本“静夜思.txt”的内容是:
床前明月光,疑是地上霜,举头望明月,低头思故乡。
 
文本中有四句古诗,诗句之间用逗号分隔。古诗原本是没有标点符号的,标点符号是后人才加上去的。逗号在语文上是语气暂停的意思,其实就是用来分隔语句意思以便于阅读和理解。Delims=,的意思就是提取逗号做分隔符,并以此将诗句分成四个小列或小节。
 
第一列
分隔符
第二列



第三列



第三列
第一行
床前明月光

疑是地上霜

举头望明月,

低头思故乡。
 
如果我要用for将四句诗都显示到屏幕上,不需要任何参数即能实现:
 

复制代码 代码示例:
@echo off
for /f %%i in (静夜思.txt) do echo %%i
pause>nul
 

如果只要“床前明月光”这句话,就需要delims帮忙了:
 

复制代码 代码示例:
@echo off
for /f "delims=," %%i in (静夜思.txt) do echo %%i
pause>nul

讲解:
delims=后面跟了一个逗号,表示用原文中的逗号作为分隔符(划分的方法)将古诗分成四个小节。默认情况下,delims只显示分隔符前的第一小节,分隔符通常被忽略掉。显示其他小节的诗句要用到列提取命令“tokens”。
 
仍用前面eol里的文本“a.txt”做试验。
例:如何只显示每行的第一个标点前的内容?
 

复制代码 代码示例:
@echo off
for /f "eol=: delims=,, " %%i in (a.txt) do echo %%i
pause>nul

运行结果显示:
aaa
iii
eee
你好
 
注意:
文本中有英文的点号和中文的逗号,点号要放在逗号前面。
符号集中(也就是=后面的标点符号),各个符号之间没有空格。
文本中用空格分隔的,符号集里中文逗号后面只有一个空格,且必须放到最后。
用于分隔的标点符号重复的一般只取一个做代表。
for默认是以空格和,:;/等标点符号作分割符的,所以要取得整行内容通常会用"delims="这样的形式来取消for的默认分割符。
 
例:为什么第三行的iii后面的内容不见了?
 

复制代码 代码示例:
@echo off
for /f    %%i in (a.txt) do echo %%i
pause>nul
 

讲解:
这里没有使用delim进行分隔,而带有空格的行空格后面的内容被忽略了,原因就是默认情况下,也就是没有即使没有用delims选项,for也会以空格作为分隔符,将空格后的内容屏蔽掉。
 
使用delims的目的主要是通过切分字符串获得可编辑的字符串以便于进行下一步编辑。