快速业务通道

for 语句从入门到精通

作者 佚名 来源 批处理 浏览 发布时间 2013-07-09
echo off
for /f "delims=, tokens=2,5" %%i in (test.txt) do echo %%i %%j
pause

  如果有这样一个要求:显示[txt2]中的内容,但是逗号要替换成空格,如何编写代码?

  结合上面所学的内容,稍加思索,你可能很快就得出了答案:

[code11]
@echo off
for /f "delims=, tokens=1,2,3,4,5" %%i in (test.txt) do echo %%i %%j %%k %%l %%m
pause

  写完之后,你可能意识到这样一个问题:假如要提取的“节”数不是5,而是10,或者20,或者更多,难道我也得从1写到10、20或者更多吗?有没有更简洁的写法呢?

  答案是有的,那就是:如果要提取的内容是连续的多“节”的话,那么,连续的数字可以只写最小值和最大值,中间用短横连接起来即可,比如 tokens=1,2,3,4,5 可以简写为 tokens=1-5 。

  还可以把这个表达式写得更复杂一点:tokens=1,2-5,tokens=1-3,4,5,tokens=1-4,5……怎么方便就怎么写吧。

  大家可能还看到一种比较怪异的写法:

[code12]
for /f "delims=, tokens=1,*" %%i in (test.txt) do echo %%i %%j
pause

  结果,第一个逗号不见了,取代它的是一个空格符号,其余部分保持不变。

  其中奥妙就在这个星号上面。

  tokens=后面所接的星号具备这样的功能:字符串从左往右被切分成紧跟在*之前的数值所表示的节数之后,字符串的其余部分保持不变,整体被*所表示的一个变量接收。

  理论讲解是比较枯燥的,特别是为了严密起见,还使用了很多限定性的修饰词,导致句子很长,增加了理解的难度,我们还是结合[code12]来讲解一下吧。

  [txt2] 的内容被切分,切分符号为逗号,当切分完第一节之后,切分动作不再继续下去,因为 tokens=1,* 中,星号前面紧跟的是数字1;第一节字符串被切分完之后,其余部分字符串不做任何切分,整体作为第二节字符串,这样,[txt2]就被切分成了两节,分别被变量%%i和变量%%j接收。

  以上几种切分方式可以结合在一起使用。不知道下面这段代码的含义你是否看得懂,如果看不懂的话,那就运行一下代码,然后反复揣摩,你一定会更加深刻地理解本节所讲解的内容的:

[code13]
@echo off
for /f "delims=, tokens=1,3-4,*" %%i in (test.txt) do echo %%i %%j %%k %%l
pause

(四) 跳过无关内容,直奔主题:skip=n

  很多时候,有用的信息并不是贯穿文本内容的始终,而是位于第N行之后的行内,为了提高文本处理的效率,或者不受多余信息的干扰,for /f 允许你跳过这些无用的行,直接从第N+1行开始处理,这个时候,就需要使用参数 skip=n,其中,n是一个正整数,表示要跳过的行数。例如:

[code14]
@echo off
for /f "skip=2" %%i in (test.txt) do echo %%i
pause

  这段代码将跳过头两行内容,从第3行起显示test.txt中的信息。


(五) 忽略以指定字符打头的行:eol=

  在cmd窗口中敲入:for /?,相关的解释为:

[quote]
eol=c - 指一个行注释字符的结尾(就一个)
[/quote]
[quote]
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

会分析 myfile.txt 中的每一行,忽略以分号打头的那些行……
[/quote]

  第一条解释狗屁不通,颇为费解:行注释字符的结尾是什么意思?“(就一个)”怎么回事?结合第二条解释,才知道eol有忽略指定行的功能。但是,这两条解释是互相矛盾的:到底是忽略以指定字符打头的行,还是忽略以指定字符结尾的行?

  实践是检验真理的唯一标准,还是用代码来检验一下eol的作用吧:
[code15]
@echo off
for /f "eol=;" %%i in (test.txt) do echo %%i
pause

  结果,那些以分号打头的行没有显示出来。

  由此可见,第二条解释是正确的,eol= 的准确含义是:忽略以指定字符打头的行。而第一条的“结尾

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号