Windows 相当于 Unix "find" 命令?

Windows equivalent of Unix "find" command?

我希望能够使用命令行而不是 GUI 界面在 Windows 机器上搜索文件。例如,在 Linux 上,我使用:

找到。 -name "*.c" -exec grep -Hn "sqlcommand" {} \;

有没有和Windows类似的东西?

新的和改进的答案

我最近偶然发现了一个与 Unix 中的 find 非常相似的内置命令:

ForFiles

基本语法是:

forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c <Command>] [/d [{+|-}][{<Date>|<Days>}]]

在构建每个文件要执行的命令时(通过 /c 开关),有几个变量可以使用:

  • @FILE文件名。
  • @FNAME 不带扩展名的文件名。
  • @EXT 文件扩展名。
  • @PATH 文件的完整路径。
  • @RELPATH文件的相对路径。
  • @ISDIR 如果文件类型是目录,则计算结果为 TRUE。否则,此变量的计算结果为 FALSE。
  • @FSIZE 文件大小,以字节为单位。
  • @FDATE 文件的最后修改日期戳。
  • @FTIME 文件的最后修改时间戳。

看起来你会使用这样的命令:

FORFILES /m *.cs /c FINDSTR /I /N /C:"sqlcommand" @FILE

我不确定这个命令已经存在了多久,但我能在文档中找到的最早参考来自 2008 年 9 月 2 日:

https://web.archive.org/web/20080902221744/http://technet.microsoft.com:80/en-us/library/cc753551.aspx

并且该页面声明它最后更新于“2007 年 4 月 25 日”。该文档在“Windows 服务器”下归档,因此我相信它很可能从那里开始,并被添加到从 Windows Vista 开始的桌面操作系统中。我确实检查了 Windows XP 并没有在那里看到它,虽然它在 Windows 10.


原始答案

这需要两个 DOS 命令的组合:

  • FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

  • DIR /B /O:N /W *.c(这是上面FOR命令中注明的'command'

创建CMD脚本如下:

@ECHO OFF

FOR /F %%B IN ('DIR /B /O:N /W *.cs') DO (
    findstr /I /N /C:"sqlcommand" %%B
)

,只需使用在这组 Unix 命令端口中找到的 find 命令:

http://unxutils.sourceforge.net/

http://sourceforge.net/projects/unxutils/

(两个链接应该是同一个项目)

在长时间使用 Unix 系统后,我不得不在 Windows 上制作一些脚本。 对于严肃的脚本编写,Powershell 是您应该使用的工具。 您可以使用 powershell find string in file 等关键字搜索 Internet, 或其他组合,您会发现很多信息。 就是这个问题,像

这样的简单单行
get-childitem C:\yourdir -include *.c -recursive |Select-String -pattern sqlcommand

对你帮助不大。您需要找到 PowerShell IDE,学习不同的语法并尝试喜欢/接受这些新东西。

如果您想更频繁地执行这些操作,请准备好学习 PowerShell,或者尝试在您的 windows(cygwin,或更好的 git windows)