以递归方式搜索文件夹以列出包含字符串 windows 的文件名

search a folder recursively to list the file names which contains the string windows

提问人:vijayakumar ponnusamy 提问时间:11/11/2023 最后编辑:James Zvijayakumar ponnusamy 更新时间:11/12/2023 访问量:45

问:

我有一个文件夹,其中包含多种类型的文件(word/excel/pdf/记事本)。我想列出文件中有字符串的。

例如:

  1. vijay - 仅当文件内任何位置的字符串为“vijay”时才列出文件

  2. Vijay Kumar - 仅列出文件中包含“Vijay Kumar”的文件

我尝试了以下命令,但它要么没有列出文件,要么拉出里面没有 vijay 的文件。

findstr /s /i /m /c:"vijay" *.*  > vijay.txt;

您能否提供一个 Windows 脚本,我可以在其中根据我的搜索词获取文件列表

批处理文件 搜索 脚本 findstr windows脚本

评论


答:

0赞 K J 11/11/2023 #1

有一些原因导致看不到诸如“vijay”之类的字符串Findstr

    1. 它可能会忽略一些具有相邻符号的符号,但同样可能不会。enter image description here
    1. 它不能解压缩 zip 或 docx,也不能解码 PDF,但是如果设置为包含 iFilters,则资源管理器搜索可以。

如果您正确设置了 Windows 搜索,您可能会在几秒钟内从不断更新的索引中获得结果,因此在我的下载区域中,我找到了您的名字 25 次。显然是在数千个文件中的 100 个!

虽然这不是您问题的一部分,但有许多替代方法,也许最适合您的任务类型的是查看 MythicSoft AgentRansack Pro https://help.mythicsoft.com/filelocatorpro/v9/en/index.html?index-interface.htm 或 Swiss File Knife/Depeche,但它们可能不适用于 PDF 索引。

enter image description here

0赞 Owen DeLong 11/11/2023 #2
  1. 安装最新版本的 WSL。
  2. 使用 grep -- grep -a [-r] -l '<regular_expression>'

-r 标志将导致它递归子目录。如果希望它也遵循快捷方式,请使用 -R 而不是 -r。

如果需要包含匹配字符串的行,请省略 -l。 如果要在匹配行的前面使用行号,请使用 -n。

grep 命令还有更多选项。

我不会在这里完全解释“正则表达式”,但只要说“Vijay”将匹配任何包含 Vijay 的字符串,“Vijay Kumar”将匹配任何包含 Vijay Kumar 的字符串就足够了。但是,您还可以执行其他操作,例如,“([\da-fA-F]{1,2}[:.-]){5}[\da-fA-F]{1,2}”将使用 :、- 或 匹配 MAC 地址。分隔八位字节并以十六进制表示。(它不会匹配奇怪的 Cisco aaaa.aaaa.aaaa 格式或更奇怪的 Cisco aaaa-aaaa-aaaa 格式,但它会匹配标准的 12:34:56:78:9a:bc 格式,并将 :、- 或 . 的任意组合作为分隔符。

() 是一组正则表达式组件。[] 构建一个字符类,因此该类中的任何指定字符都将匹配。类 [\da-fA-F] 将匹配任何数字(\d = 数字 0-9 的字符类)、a-f 范围内的任何字母或 A-F 范围内的任何大写字母。所以基本上,这个字符类将匹配一个十六进制数字。{x,y} 构造是一个范围。它表示匹配前面正则表达式的 x-y 实例。因此,字符类后面的 {1,2} 将匹配 1 或 2 个十六进制数字。接下来,我们为分隔符定义一个字符类。因为。和 - 通常在正则表达式字符类中是特殊的 (. 表示匹配任何单个字符, - 用于指定范围(例如 a-f = a,b,c,d,e 或 f),为了从字面上匹配它们,它们必须用 \ 字符转义。所以现在我们有一个表达式,它匹配 1-2 个十六进制数字,后跟 :、- 或 .-- 这是我们放在括号中的内容,这样我们就可以{5}匹配它 5 次。然后我们重复 1-2 个十六进制数字规范,不带尾随分隔符以匹配第 6 个八位字节。

正如你所看到的,这让你可以很容易地做很多非常酷的事情。

这些工具内置于信誉良好的操作系统中,但您需要添加适用于 Linux 的 Windows 子系统才能在 Windows 上使用它们(这似乎是您最有可能使用的)。

评论

0赞 Owen DeLong 11/12/2023
呵呵......YMMV,但我发现一个好的命令行工具通常比导航 GUI 要高效得多,尤其是对于简单的递归文本搜索之类的东西。WSL 也是“原生的”,因为它是 Microsoft 为 Windows 提供的包,可以轻松安装并附带大量有用的 CLI 工具。YMMV。