我也来补充几条:
1、- for %i in (*.txt) do echo %i
复制代码 以上语句不能检测到带隐藏属性的txt文件;
2、复制代码 10.pdf 被改成了什么?10.pdf2.c!具体分析请看这篇文章:http://www.cn-dos.net/forum/viewthread.php?tid=29538
3、
cmd窗口中运行 for /?,找到一段话:
什么意思?是说如果要找到以c字符结尾的某行文字,只需要添加 eol=c 的限制就可以了么?试试运行如下代码:- @echo off
- for /f "eol=c" %%i in (test.txt) do echo %%i
- pause
复制代码 测试文本test.txt的内容为:
结果如何?居然是不显示第二行内容!
第二行内容有什么规律?它是以字符 c 打头的。My God,天杀的瘟到死,居然把"忽略以字符c打头的行"给翻译成"忽略以字符c结尾的行"!
4、
还是上面那个test.txt,代码还是上面那一个,不过去掉了引号内的限制,改成:- @echo off
- for /f %%i in (test.txt) do echo %%i
- pause
复制代码 结果,所有以分号打头的行都没显示出来。原来for语句暗含忽略以分号打头的行的功能,因为以分号打头的行在很多语言中都是作为注释语句。
5、- @echo off
- for /f %%i in (test.txt) do (
- set str=%%i
- setlocal enabledelayedexpansion
- echo !str!
- )
- pause
复制代码 当test.txt内的行数超过32行时,第32行之后,每显示一行的内容,将报错一次:“已经达到最大的 setlocal 递归层。”,当在 echo 的下一句添加 endlocal 语句时,将不会报错。
5、- set /p str=<test.txt
- echo %str%
复制代码 获取 test.txt 第一行的内容,并赋予变量 str
6、复制代码 当 test.txt 最后一行不是空行的时候,将获取最后一行的内容,因为最后一行的字符在结尾处只含回车符号而不含换行符号(貌似是这样解释的吧?),而 $ 在findstr中的准确含义是"匹配回车+换行符号"。
7、- set str=abc
- set /a num=%str%&&(echo %str% 是数字) || echo (%str%不是数字)
复制代码 在SP2环境下,它是可以判断某一字符串是不是纯数字的(要求数字的范围在0~2^32-1这个范围内),但是,到了SP3下之后,这条语句已经不再适用,因为如果某一字符串不是数值,将 set /a num=%str% 之后,num的值将会被赋为0值。
8、- set /a num1=123,num2=345
- echo %num1%
- echo %num2%
复制代码 同时给两个变量赋予数值类型的值。如果其中某个变量的值不是数值,在SP2下将出错,在SP3下该变量的值为0。
9、- @echo off
- for /f "delims=" %%i in ('type test.txt') do echo "%%i"
- pause
复制代码 对一个追求代码极限简洁的狂热分子来说,type命令可能显得画蛇添足,但是,当你处理的test.txt是Unicode编码的时候,你将体会到什么叫不可或缺。当然,type也可以换成more,不过more在显示长文本的时候会分屏显示。
10、复制代码 test.txt中有一行内容:
上面的代码竟然不能查到这行内容!加上 /i 或 /r 参数,奇迹就会出现。难道这是 findstr 在查找以空格分隔的多个纯中文字符串的时候存在的bug? |