for 语句从入门到精通
作者 佚名
来源 批处理
浏览
发布时间 2013-07-09
”纯属微软在信口开河。 那么,“(就一个)”又作何解释呢? 试试这个代码: [code16] @echo off for /f "eol=,;" %%i in (test.txt) do echo %%i pause 此时,屏幕上出现 此时不应有 ;"。 的报错信息。可见,在指定字符的时候,只能指定1个——在很多时候,我对这样的设计颇有微词而又无可奈何:为什么只能指定1个而不是多个?要忽略多个还得又是if又是findstr加管道来多次过滤,那效率实在太低下了——能用到的功能基本上都提供,但是却又做不到更好,批处理,你的功能为什么那么弱? 不知道大家注意到没有,如果test.txt中有以分号打头的行,那么,这些行在代码[code14]的执行结果中将凭空消失。 原来,for /f 语句是默认忽略以分号打头的行内容的,正如它默认以空格键或跳格键作为字符串的切分字符一样。 很多时候,我们可以充分利用这个特点,比如,在设计即将用for读取的配置文件的时候,可以在注释文字的行首加上分号,例如在编写病毒文件查杀代码的时候,可以通过for语句来读取病毒文件列表,那么,病毒文件列表.ini这个配置文件可以这样写: ;以下是常见的病毒文件,请见一个杀一个^_^ ;copyleft:没有 qq.exe msn.exe iexplore.exe 如果要取消这个默认设置,可选择的办法是: 1、为eol=指定另外一个字符; 2、使用 for /f "eol=" 语句,也就是说,强制指定字符为空,就像对付delims=一样。 (六)如何决定该使用 for /f 的哪种句式?(兼谈usebackq的使用) for /f %%i in (……) do (……) 语句有好几种变形语句,不同之处在于第一个括号里的内容:有的是用单引号括起来,有的是用双引号包住,有的不用任何符号包裹,具体格式为: 1、for /f %%i in (文件名) do (……) 2、for /f %%i in (''命令语句'') do (……) 3、for /f %%i in ("字符串") do (……) 看到这里,我想很多人可能已经开始犯了迷糊了:如果要解决一个具体问题,面对这么多的选择,如何决定该使用哪一条呢? 实际上,当我在上面罗列这些语句的时候,已经有所提示了,不知道你是否注意到了。 如果你一时无法参透其中奥妙,那也无妨,请听我一一道来便是。 1、当你希望读取文本文件中的内容的话,第一个括号中不用任何符号包裹,应该使用的是第1条语句;例如:你想显示test.txt中的内容,那么,就使用 for /f %%i in (test.txt) do echo %%i; 2、当你读取的是命令语句执行结果中的内容的话,第一个括号中的命令语句必须使用单引号包裹,应该使用的是第2条语句;例如:你想显示当前目录下文件名中含有test字符串的文本文件的时候,应该使用 for /f %%i in (''dir /a-d /b *test*.txt'') do echo %%i 这样的语句; 3、当你要处理的是一个字符串的时候,第一个括号中的内容必须用双引号括起来,应该是用的是第3条语句;例如:当你想把bbs.bathome.cn这串字符中的点号换为短横线并显示出来的话,可以使用 for /f "delims=. tokens=1-3" %%i in ("bbs.bathome.cn") do echo %%i-%%j-%%k 这样的语句。 很显然,第一个括号里是否需要用符号包裹起来,以及使用什么样的符号包裹,取决于要处理的对象属于什么类型:如果是文件,则无需包裹;如果是命令语句,则用单引号包裹;如果是字符串,则使用双引号括起来。 当然,事情并不是绝对如此,如果细心的你想到了批处理中难缠的特殊字符,你肯定会头大如斗。 或许你头脑中灵光一闪,已经想到了一个十分头痛的问题:在第1条语句中,如果文件名中含有空格或&,该怎么办? 照旧吗? 拿个叫 test 1.txt 的文件来试试。 你很快写好了代码,新建文件-->码字-->保存为批处理,前后费时不到1分钟: [code17] @e |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于for 语句从入门到精通的所有评论