批量搜索目录/文件中的几个单独的字符串,并为每个字符串找到结果

批量搜索目录/文件中的几个单独的字符串,并为每个字符串找到结果

我想递归搜索父目录和所有子目录以查找几个单独的字符串,并显示每个字符串的结果。例如:

要搜索的文本

Foo
Bar
Fizz
Buzz
(list continues for several hundred words)

结果窗格

Foo
  - Found in files x, y, z
Bar
  - Found in files x, y
Fizz
  - Not found in any files
Buzz
  - Found in files y, z

概括
我有一个包含数百个字符串的列表,需要搜索多次。搜索单个字符串的过程非常繁琐,我正在寻找一种批量执行此操作的方法。

是否有任何 Windows 程序可以执行此类搜索?

仅供参考
我尝试使用 notepad++ 和 Visual Studio,但还没有找到满足将每个字符串显示为单独结果的要求的方法。

答案1

下面的批处理脚本可以执行此操作。

@echo off

for /F %%i in (pattern.txt) do (
echo Files containing %%i
findstr /M /C:%%i /S *.txt
)        

如果字符串不存在于任何文件中,它不会打印您想要的语句。相反,它会打印一个空的文件列表。来源:Findstr 命令

答案2

瑞士锉刀有一个命令“hexfind”,可以并行搜索任意数量的模式。创建一个搜索模式文件“mypatterns.txt”,其中包含:

/Foo/
/Bar/
/Fizz/
/Buzz/

要搜索文件夹 mydir 的所有文件(包括所有子文件夹),请输入:

sfk hexfind -bylist mypatterns.txt mydir

这将产生找到的每个单个匹配项的转储,例如:

testfiles\Formats\10-dir-list.txt : hit at offset 0x273
>4261724D 75672E68 70700D0A 433A5C73< BarMug.hpp..C:\s 00000273
testfiles\Formats\10-dir-list.txt : hit at offset 0x290
>466F6F42 616E6B5C 42617244 72697665< FooBank\BarDrive 00000290

要仅列出包含匹配项的文件名,请添加选项 -nodump。这不会生成您请求的精确结果窗格,但至少您可以看到模式出现的位置。

如果使用 // 格式创建 mypatterns.txt 有问题,您可以从 wordlist.txt 生成该文件,例如:

sfk filter wordlist.txt -form "/$col1/" +tofile mypatterns.txt

答案3

Grep是你的朋友。你可以将要查找的模式放入名为 patterns.txt 的文件中,然后运行以下命令:

grep -f patterns.txt -r * > ..\results.txt

编辑:

刚刚遇到了关于grep-like的问题Windows 中可用的东西。问题和答案涵盖了许多免费和非免费的独立工具和命令,例如内置在 Powershell 中。

相关内容