批处理:FOR的参数/F之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的目的主要是通过切分字符串获得可编辑的字符串以便于进行下一步编辑。Delims好比一
把西瓜刀,文本信息就好比西瓜,使用delims这把西瓜刀将文本这个西瓜切分成许多小块,这样吃起来就方便了。
如果你想吃其中的某一块,怎么办呢?直接用刀叉tokens提取就可以了。请看下节。
练习:
1、请简单说说分隔符和标点符号的区别。
2、请举例说说delims的作用。四风问题
3、请用delims处理以下新闻标题:
第十六届中共中央组织结构图_中国共产党第十七次全国代表大会专题_新闻中心_新浪网.mht
线性代数
4、请用delims处理以下网页标题: