我当初用命令行把G盘删掉了文件 好像是RD命令,一下子10多G没了,后来用恢复软件,全都恢复了,就一个500M的缺损。
排除文件,我只知道这个- (五) 忽略以指定字符打头的行: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= 的准确含义是:忽略以指定字符打头的行。而第一条的“结尾”纯属微软在信口开河。
-
- 那么,“(就一个)”又作何解释呢?
-
- 试试这个代码:
- [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=一样。
复制代码
|