在 (Windows) find 命令中跳过没有匹配的文件

在 (Windows) find 命令中跳过没有匹配的文件

是否可以find仅在找到结果时才输出 Windows 命令?有这样简单的搜索命令:

find "str1" *.* 

无论是否找到“str1”字符串,find 总是输出扫描的文件名,如下所示:

---------- FILE1.TXT

---------- FILE2.TXT
This is a line in file2.txt that contains str1.

---------- FILE3.TXT

我只想看到包含字符串“str1”的文件。

答案1

使用findstr而不是find只获取匹配的文件名和行内容。或者使用它只获取包含任意数量匹配项的任何文件的文件名。

该解决方案不需要复杂的批处理逻辑或将find命令放入循环中来解析输出等以获得预期结果。

命令1

findstr "str1" *.*

输出

File.txt:"something","str1","something else"
File.txt:"str1","same file","different line"
File2.txt:"some line","str1","different file"
File9.txt:"another line","different file","str1

输出解释

File.ext:display whole line containing matching string

笔记: 每次在任何文件中找到匹配字符串的每一行时,都会显示文件名 - 并且还会显示找到匹配字符串的行内容。


命令 2

findstr /M "str1" *.*

输出

File.txt
File2.txt
File9.txt

笔记: 对于内容中包含任何匹配字符串的每个匹配文件,这仅显示文件名,且仅显示一次。

支持资源

答案2

您只需find . -name 'str1'在当前目录中使用递归搜索即可。

相关内容