http://bathome.l3.wuyou.com/thread-11159-1-6.html
/B 在一行的开始配对模式。——只在行开头搜索。
/L 按字使用搜索字符串。——具体不详,可以与 /r 参数替换测试。
/R 将搜索字符串作为一般表达式使用。——当命令成功而搜索失败时(某些中文字符搜索,类似 /I 参数),可以试试这个参数。
/S 在当前目录和所有子目录中搜索匹配文件。——这个没啥说的,搜索程序所在目录内的所有位置。
/I 指定搜索不分大小写。——搜索英文时注意。
/X 打印完全匹配的行。——只有搜索到的行与搜索词一致时显示结果。
/V 只打印不包含匹配的行。——与 /X 参数相反,如果行中没包含搜索词就显示。
/N 在匹配的每行前打印行数。——这个可以用来获得一个文本由多少行,并可以与FOR、if等组合定位行。
/M 如果文件含有匹配项,只打印其文件名。——用于搜索文件,搜索到含有关键词的文件时,就显示文件名。
/O 在每个匹配行前打印字符偏移量。——没用过,偏移量应该和SET的截取差不多吧,大大们解释下。
/P 忽略有不可打印字符的文件。——我很少用。
/OFF[LINE] 不跳过带有脱机属性集的文件。。——我很少用。
/A:attr 指定有十六进位数字的颜色属性。请见 "color /?"——搜索到文件时用色彩显示出来,很有用。
/F:file 从指定文件读文件列表 (/ 代表控制台)。——应该是与 /G:file 参数相对,也就是从文本中搜索字符时,该文本可以预先写入一个文本中,然后类似FOR的读取。似乎是这样。
/C:string 使用指定字符串作为文字搜索字符串。——我很少用。
/G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。——FIndstr可以将搜索关键词写入到一个文本中,然后一次性的用该文本获取关键词进行搜索,类似FOR。
/D:dir 查找以分号为分隔符的目录列表。——使用findstr /n的结果会以分号分隔,此时该命令应该起作用,没用过。
findstr /b "test" test.txt
会搜索出test123这一行,而不会搜索出123test这一行,/e与此类似。
/l和/r:望高手补充
/s:在当前目录和所有子目录中搜索匹配文件,与通配符搭配功能强大,如
findstr /s "test" *.txt
会搜索当前目录和其所有子目录下的文本文件,打印出含有字符串"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
执行结果为:
1:test123
2:123test
也就是在找到的每行前加上行号(该行在该文件中位于哪行),用冒号分隔。
/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,那么执行下列命令:
findstr /f:list.txt "1"
结果如下:
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 /r "" 1.txt 是正则表达式,用法如下
1.findstr . 2.txt 或 Findstr "." 2.txt
从文件2.txt中查找任意字符,不包括空字符或空行
====================
2.findstr .* 2.txt 或 findstr ".*" 2.txt
从文件2.txt中查找任意字符包括空行和空字符
====================
3.findstr "[0-9]" 2.txt
从文件2.txt中查找包括数字0-9的字符串或行
====================
4.findstr "[a-zA-Z]" 2.txt
从文件2.txt中查找包括任意字符的字符串或行
====================
5.findstr "[abcezy]" 2.txt
从文件2.txt中查找包括a b c e z y字母的字符串或行
====================
6.findstr "[a-fl-z]" 2.txt
从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。
====================
7.findstr "M[abc][hig]Y" 2.txt
从文件2.txt中可以匹配 MahY , MbiY, MahY等…..
====================
8. ^和$符号的应用
^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词
$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词
====================
9.findstr "[^0-9]" 2.txt
如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。
====================
10.findstr "[^a-z]" 2.txt
同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了
====================
11.*号的作用
前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。
====================
12.findstr "^[0-9]*$" 2.txt
这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。
Findstr "^[a-z]*$" 2.txt
这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了
如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。
=====================
13. "\<…\>"这个表达式的作用
这个表示精确查找一个字符串,\<sss 表示字的开始位置,sss\>表示字的结束位置
echo hello world computer|findstr "\<computer\>"这样的形式
echo hello worldcomputer|findstr "\<computer\>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer\>"这样就可以匹配了