Windows 相当于 Unix "find" 命令?
Windows equivalent of Unix "find" command?
我希望能够使用命令行而不是 GUI 界面在 Windows 机器上搜索文件。例如,在 Linux 上,我使用:
找到。 -name "*.c" -exec grep -Hn "sqlcommand" {} \;
有没有和Windows类似的东西?
新的和改进的答案
我最近偶然发现了一个与 Unix 中的 find
非常相似的内置命令:
基本语法是:
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 日:
并且该页面声明它最后更新于“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)
我希望能够使用命令行而不是 GUI 界面在 Windows 机器上搜索文件。例如,在 Linux 上,我使用:
找到。 -name "*.c" -exec grep -Hn "sqlcommand" {} \;
有没有和Windows类似的东西?
新的和改进的答案
我最近偶然发现了一个与 Unix 中的 find
非常相似的内置命令:
基本语法是:
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 日:
并且该页面声明它最后更新于“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)