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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于for 语句从入门到精通的所有评论