提问人:vijayakumar ponnusamy 提问时间:11/11/2023 最后编辑:James Zvijayakumar ponnusamy 更新时间:11/12/2023 访问量:45
以递归方式搜索文件夹以列出包含字符串 windows 的文件名
search a folder recursively to list the file names which contains the string windows
问:
我有一个文件夹,其中包含多种类型的文件(word/excel/pdf/记事本)。我想列出文件中有字符串的。
例如:
vijay - 仅当文件内任何位置的字符串为“vijay”时才列出文件
Vijay Kumar - 仅列出文件中包含“Vijay Kumar”的文件
我尝试了以下命令,但它要么没有列出文件,要么拉出里面没有 vijay 的文件。
findstr /s /i /m /c:"vijay" *.* > vijay.txt;
您能否提供一个 Windows 脚本,我可以在其中根据我的搜索词获取文件列表
答:
有一些原因导致看不到诸如“vijay”之类的字符串Findstr
如果您正确设置了 Windows 搜索,您可能会在几秒钟内从不断更新的索引中获得结果,因此在我的下载区域中,我找到了您的名字 25 次。显然是在数千个文件中的 100 个!
虽然这不是您问题的一部分,但有许多替代方法,也许最适合您的任务类型的是查看 MythicSoft AgentRansack Pro https://help.mythicsoft.com/filelocatorpro/v9/en/index.html?index-interface.htm 或 Swiss File Knife/Depeche,但它们可能不适用于 PDF 索引。
- 安装最新版本的 WSL。
- 使用 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 上使用它们(这似乎是您最有可能使用的)。
评论
上一个:读取搜索键并将其放入网页中
下一个:预锁钩玳瑁SVN
评论