在文件中寻找字符串。
- FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
- [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
- strings [[drive:][path]filename[ ...]]
- /B 在一行的开始配对模式。
- /E 在一行的结尾配对模式。
- /L 按字使用搜索字符串。
- /R 将搜索字符串作为正则表达式使用。
- /S 在当前目录和所有子目录中搜索匹配文件。
- /I 指定搜索不分大小写。
- /X 打印完全匹配的行。
- /V 只打印不包含匹配的行。
- /N 在匹配的每行前打印行数。
- /M 如果文件含有匹配项,只打印其文件名。
- /O 在每个匹配行前打印字符偏移量。
- /P 忽略有不可打印字符的文件。
- /OFF[LINE] 不跳过带有脱机属性集的文件。
- /A:attr 指定有十六进位数字的颜色属性。请见 "color /?"
- /F:file 从指定文件读文件列表 (/ 代表控制台)。
- /C:string 使用指定字符串作为文字搜索字符串。
- /G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。
- /D:dir 查找以分号为分隔符的目录列表
- strings 要查找的文字。
- [drive:][path]filename
- 指定要查找的文件。
- 除非参数有 /C 前缀,请使用空格隔开搜索字符串。
- 例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
- "there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找
- "hello there"。
- 正则表达式的快速参考:
- . 通配符: 任何字符
- * 重复: 以前字符或类出现零或零以上次数
- ^ 行位置: 行的开始
- $ 行位置: 行的终点
- [class] 字符类: 任何在字符集中的字符
- [^class] 补字符类: 任何不在字符集中的字符
- [x-y] 范围: 在指定范围内的任何字符
- \x Escape: 元字符 x 的文字用法
- \<xyz 字位置: 字的开始
- xyz\> 字位置: 字的结束
- 有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。
这则帮助信息中,我将“一般表达式”,全部替换成了“正则表达式”(一切都是机器翻译惹的祸)。
感谢weichengxiehou。
参数详解部分13-14节都是从weichengxiehou的帖子里复制来的(既然有现成了,省心多少),原帖地址。
- Hello World
- Hello Boy
- hello ,good man.
- goodbye!
- findstr "hello" a.txt
- C:\Users\helloworld\Desktop>findstr "hello" a.txt
- hello ,good man.
- findstr "Hello" a.txt
- C:\Users\helloworld\Desktop>findstr "Hello" a.txt
- Hello World
- Hello Boy
findstr默认是区分大小写的(跟find命令一样)——找hello就不会出现Hello,反之亦然。
- C:\Users\helloworld\Desktop>findstr /i "Hello" a.txt
- Hello World
- Hello Boy
- hello ,good man.
- C:\Users\helloworld\Desktop>findstr /n /i "hello" a.txt
- 1:Hello World
- 2:Hello Boy
- 3:hello ,good man.
- C:\Users\helloworld\Desktop>find /n "hello" a.txt
- ---------- A.TXT
- [3]hello ,good man.
- C:\Users\helloworld\Desktop>findstr /m /i "hello" *.txt
- 1.txt
- a.txt
- 除非参数有 /C 前缀,请使用空格隔开搜索字符串。
- 例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
- "there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找
- "hello there"。
- good hello
- 你好 hello world
- Hello World
- Hello Boy
- hello ,good man.
- goodbye!
- C:\Users\helloworld\Desktop>findstr /b /i "hello" a.txt
- Hello World
- Hello Boy
- hello ,good man.
- C:\Users\helloworld\Desktop>findstr /i "^hello" a.txt
- Hello World
- Hello Boy
- hello ,good man.
- C:\Users\helloworld\Desktop>findstr /e /i "hello" a.txt
- good hello
- C:\Users\helloworld\Desktop>findstr /i "hello$" a.txt
- good hello
- hello
- hello hello
- good hello
- 你好 hello world
- Hello World
- Hello Boy
- hello ,good man.
- goodbye!
- C:\Users\helloworld\Desktop>findstr /n /i "^hello$" a.txt
- 1:hello
- C:\Users\helloworld\Desktop>findstr /n /i /x "hello" a.txt
- 1:hello
- C:\Users\helloworld\Desktop>findstr /li "^hello" a.txt
- hello hello
- Hello World
- Hello Boy
- hello ,good man.
因为,当你使用“普通字符串模式”,findstr不会把^当做是正则表达式的元字符,而只是把其当做普通字符^,也就是说它此时已经不具备“表示行首”的功能,变成了和h之类字符一样的普通民众,再也没“特权”。
- ^hello
- hello
- hello hello
- good hello
- 你好 hello world
- Hello World
- Hello Boy
- hello ,good man.
- goodbye!
- C:\Users\helloworld\Desktop>findstr /nli "^hello" a.txt
- 1:^hello
- C:\Users\helloworld\Desktop>findstr /vni "hello" a.txt
- 9:goodbye!
- findstr /ms "专业" *.txt
- C:\Users\helloworld\Desktop\1.txt
- C:\Users\helloworld\Desktop\a.txt
- C:\Users\helloworld\Desktop\clip.txt
- C:\Users\helloworld\Desktop\CrLf 批处理笔记.txt
- C:\Users\helloworld\Desktop\file.txt
- C:\Users\helloworld\Desktop\MyRarHelp.txt
- C:\Users\helloworld\Desktop\test.txt
- C:\Users\helloworld\Desktop\红楼.txt
- C:\Users\helloworld\Desktop\520\新建文本文档.txt
- C:\Users\helloworld\Desktop\520\12\hello_ world.txt
- C:\Users\helloworld\Desktop\编程\help.txt
- C:\Users\helloworld\Desktop\编程\win7 help比xp help多出来的命令.txt
- C:\Users\helloworld\Desktop\编程\wmic.txt
- C:\Users\helloworld\Desktop>findstr /f:file.txt /im "hello"
- C:\Users\helloworld\Desktop\1.txt
- C:\Users\helloworld\Desktop\a.txt
- C:\Users\helloworld\Desktop\CrLf 批处理笔记.txt
- C:\Users\helloworld\Desktop\file.txt
- C:\Users\helloworld\Desktop\test.txt
- ^hello
- world
- ^hello
- hello
- hello hello
- good hello
- 你好 hello
- Hello World
- Hello Boy
- hello ,good man.
- goodbye!
- C:\Users\helloworld\Desktop>findstr /ig:string.txt a.txt
- hello
- hello hello
- Hello World
- Hello Boy
- hello ,good man.
- ^hello
- good hello
- 你好 hello
- goodbye!
从被忽略的“^hello”可以看出,在不加/l参数的前提下,用/g指定的搜索字符串中如果含有“元字符”,则作为正则表达式使用,而不是作为普通表达式。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找
"hello there"。
- hello there
- hellothere
- hello
- there
- C:\Users\helloworld\Desktop>findstr /ic:"hello there" a.txt
- hello there
- far there
- farthere
- there
- far
- farm
- farmer
- C:\Users\helloworld\Desktop>findstr "far" a.txt
- far there
- farthere
- far
- farm
- farmer
- C:\Users\helloworld\Desktop>findstr "\<far\>" a.txt
- far there
- far
/d参数我一直把它和/f、/g归为一类,但其实二者截然不同,/f、/g是用文本文件制定要查找的文件、字符串,而/d是直接书写目录名到命令中。
- C:\Users\helloworld\Desktop>findstr /imd:520;编程; ".*" "*.txt"
- 520:
- hello.txt
- 编程:
- help.txt
- win7 help比xp help多出来的命令.txt
- wmic.txt
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- aaaaaaaaaa
- findstr /o .* test.txt
- 0:aaaaaaaaaa
- 12:aaaaaaaaaa
- 24:aaaaaaaaaa
- 36:aaaaaaaaaa
- 48:aaaaaaaaaa
- >"批处理之家" set /p=<nul
- findstr /a:21 .* "批处理之家*"
- pause