我需要在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)有什么建议吗?


当前回答

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

其他回答

我推荐一个很棒的工具:

原生Unix utils:

http://unxutils.sourceforge.net/ http://en.wikipedia.org/wiki/UnxUtils

只需解压缩它们,并将该文件夹放入PATH环境变量中,瞧!:)

工作就像一个魅力,有很多比只有grep;)

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

C:\Users\ak47\Desktop\trunk>findstr /S /I /M /C:"search text" *.*

“中/旋转/ c:“字符串”[[驱动:][路径]文件名[…]]”

类似于上面第2高的答案(by i_am_jorf on Mar 30, 2009 at 22:26),它显示了以下示例:" findstr /spin /c:"string"[文件]"

但是,运行"findstr /?"显示没有定义为的选项或参数 “[文件]”。我相信他在这里暗示的是定义要搜索哪些文件的参数,“findstr /?”描述为: “[[驱动:][路径]文件名[…]]” 它后来用以下方式定义了这一点: "[drive:][path]filename" -指定要搜索的一个或多个文件。

因此,为了不使用个人简写,我提供了findstr />定义它的方式,如果搜索某些文件: “中/旋转/ c:“字符串”[[驱动:][路径]文件名[…]]”

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

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