我需要在Windows中做一个递归的grep,在Unix/Linux中就像这样:

grep -i 'string' `find . -print`

或者更可取的方法:

find . -print | xargs grep -i 'string'

我只能使用cmd.exe,所以我只有Windows内置命令。不幸的是,我无法在这个服务器上安装Cygwin或任何第三方工具,如UnxUtils。我甚至不确定我能不能安装PowerShell。只使用cmd.exe内置程序(Windows 2003 Server)有什么建议吗?


当前回答

findstr /spin /c:"string" [files]

各参数含义如下:

S =递归 P =跳过不可打印字符 I =不区分大小写 N =打印行号

要搜索的字符串是你在/c后面加引号的位:

其他回答

Select-String最适合我。这里列出的所有其他选项(比如findstr)都不能处理大文件。

这里有一个例子:

select-string -pattern "<pattern>" -path "<path>"

注意:这需要Powershell

如果您安装了Perl,您可以使用ack,可以在http://beyondgrep.com/上获得。

我刚刚用下面的命令搜索了一个文本,列出了我所有包含我指定的“搜索文本”的文件名。

C:\Users\ak47\Desktop\trunk>findstr /S /I /M /C:"search text" *.*
findstr /spin /c:"string" [files]

各参数含义如下:

S =递归 P =跳过不可打印字符 I =不区分大小写 N =打印行号

要搜索的字符串是你在/c后面加引号的位:

for /f %G in ('dir *.cpp *.h /s/b') do  ( find /i "what you search"  "%G") >> out_file.txt