在论坛潜水快两个月了,学到不少东西,谢谢各位前辈的无私奉献。
关于findstr命令,通过看帖,看前辈代码,最基本的几个开关(/b /e /i /x /v /n /o /c /g)我基本知道怎么用了,但是看到其他几个开关(/l /r /s /m /d /f /a)还是有点儿犯迷糊,可能是平时用得少的缘故,在下有点儿强迫症,想学一个命令就学全一点儿,望前辈指教,拉菜鸟一把,在此先谢谢了。
/l和/r两个开关应该是对搜索字符串的处理方法,但是我不懂什么是"按字使用"和"按一般表达式适用"。
/s帮助文件的解释是"在当前目录和所有子目录中搜索匹配文件",什么意思呢?不懂啊。
/m基本上懂是什么意思,findstr /m "123" test.txt如果test.txt中有字符串"123"就打印文件名"test.txt",如果没有就不打印,但有什么用呢?
/f 从指定文件读文件列表,不知道咋用,望指教。
/d"查找以分号为分隔符的目录列表",不知是什么意思。
/a:attr 我用findstr /a:89 .* test.txt测试可颜色并没变啊?怎么回事呢?
欢迎各位老手新手的热心解答,在此代表菜鸟们谢谢各位前辈!如果附上例子解释,在下感激不尽。
多谢 寒夜孤星 和 枫中残雪 两位前辈的热心提示,在看了一些彩色显示代码算把/a这个开关弄清楚了,谢谢!
十分感谢 甲兵时代 的热心而全面的解答,有些没明白的地方也明白了!现在就剩/l和/r两个开关了,不过收获不小。
那么为了帮助像我一样的菜鸟学习findstr命令,我就把各个开关的用法简要说下,也算是为了达到开贴为论坛服务的目的吧!
/b和/e:开始配对模式和末尾配对模式,也就是说要搜索的字符串必须在行首和行尾才算符合要求,跟正则表达式中的^和$功能相仿(请参见http://www.bathome.net/viewthread.php?tid=24&highlight=findstr%D5%FD%D4%F2%B1%ED%B4%EF%CA%BD),如- findstr /b "test" test.txt
复制代码 会搜索出test123这一行,而不会搜索出123test这一行,/e与此类似。
/l和/r:望高手补充
/s:在当前目录和所有子目录中搜索匹配文件,与通配符搭配功能强大,如复制代码 会搜索当前目录和其所有子目录下的文本文件,打印出含有字符串"test“的所有行,打印结果前会有文件路径和文件名,形如:- test\test.txt:test123
- test\test.txt:123test
复制代码 /i:指定搜索不分大小写,搜索字符串是不分大小写的,如:- findstr /i "abc" test.txt
复制代码 文本中像"123ABC"这样的行也会被列出。
/x:打印完全匹配的行,就是该行必须只含有搜索字符串才能匹配,"跟正则表达式的"^字符串$"功能类似,如:- findstr /x "test" test.txt
复制代码 会打印"test“这行,而不会打印"test123”这行。
/v:只打印不包含匹配的行,很好理解,就是含有搜索字符串的行不打印,不含有搜索字符串的行打印,如:- findstr /v "123" test.txt
复制代码 所有不包含字符串"123"的行都会被打印出来。跟正则表达式中的^作用类似。
/n:在匹配的每行前打印行数,看看执行结果就知道什么意思了:- findstr /n "test" test.txt
复制代码 执行结果为:复制代码 也就是在找到的每行前加上行号(该行在该文件中位于哪行),用冒号分隔。
/o:在每行前打印字符偏移量,在找到的每行前打印该行首距离文件开头的位置,也就是多少个字符,如test.txt中有如下内容:- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
复制代码 执行命令:- findstr /0 .* test.txt
- ::上一行中的.*为正则表达式的内容,表示任意行,包含空行
复制代码 结果如下:- 0:aaaaaaaaaa
- 12:aaaaaaaaaa
- 24:aaaaaaaaaa
- 36:aaaaaaaaaa
- 48:aaaaaaaaaa
复制代码 注意每行末尾的回车换行符算两个字符。
/a:当被搜索文件名中含有通配符*或?时对搜索结果的文件名部分指定颜色属性,具体颜色值参见color帮助:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
常用于彩色显示,举个简单的例子,想要彩色显示“批处理之家”怎么办,假如当前的color设置为27(背景绿色,字体白色),用蓝色显示“批处理之家”咋办?- ::下一行的退格符可以在cmd的编辑模式下按ctrl+p后按退格键获得
- >"批处理之家" set /p=<nul
- findstr /a:21 .* "批处理之家*"
- pause
复制代码 代码中的退格符是为了让显示的内容仅为"批处理之家",如果有其他内容,在彩色显示的"批处理之家"后还有一个冒号和其他内容,退格符正好将冒号删除。注意代码中的通配符是必须的。
/f:从指定文件读文件列表,事先可以将待搜索的文件放在一个文本文件中,每个文件放在一行,findstr命令在执行时会到文本文件中去找这些待搜索的文件,假如当前目录下有一文本文件list.txt中内容如下:- 1.txt
- 2.txt
- 3.txt
- 4.txt
- 5.txt
- 6.txt
- 7.txt
- 8.txt
- 9.txt
复制代码 且当前目录下有这些文件,文件内容都是123456789,那么执行下列命令:复制代码 结果如下:- 1.txt:123456789
- 2.txt:123456789
- 3.txt:123456789
- 4.txt:123456789
- 5.txt:123456789
- 6.txt:123456789
- 7.txt:123456789
- 8.txt:123456789
- 9.txt:123456789
复制代码 看了这个例子相信你也明白了这个开关的作用。
/m:如果文件含有匹配项,只打印其文件名,而且还会打印路径,意思很好理解,如:- findstr /s /m "123" *.txt
复制代码 会找出当前目录和其所有子目录中含有字符串"123"的文本文件,结果:- test\1.txt
- test\2.txt
- test\3.txt
- test\4.txt
- test\5.txt
- test\6.txt
- test\7.txt
- test\8.txt
- test\9.txt
复制代码 /c:使用指定字符串作为文字搜索字符串,如要搜索字符串"123 456",通常我们会想到- findstr "123 456" test.txt
复制代码 但是这样搜索字符串会被当成两个字符串,只含有"123"或"456"的行也会被打印出来,此时就可以用- findstr /c:"123 456" test.txt
复制代码 这是搜索字符串为"123 456"了。
/g:从指定的文件获得搜索字符串,也就是事先把搜索字符串放在一个文本文件中,findstr执行时到这个文件中去找这个搜索字符串,如1.txt中内容为"123“,执行命令- findstr /g:1.txt test.txt
复制代码 等同于findstr "123" test.txt。1.txt中可以有多行,表示有多个搜索字符串。
/d:查找以分号为分隔符的目录列表,就是到这个开关所指定的目录中去搜索指定文件,如有11和22两个文件夹在当前目录下,执行命令:- findstr /d:11;22 "12" *.txt
复制代码 结果如下:- 11:
- 1.txt:123
- 2.txt:123456789
- 3.txt:123456789
- 4.txt:123456789
- 5.txt:123456789
- 22:
- 6.txt:123456789
- 7.txt:123456789
- 8.txt:123456789
- 9.txt:123456789
复制代码 以上内容希望可以帮到对findstr命令不熟的朋友们,最后祝福我等菜鸟在批处理之家能够快乐地得到提高!
[ 本帖最后由 weichenxiehou 于 2011-2-22 17:17 编辑 ] |