0

我有很多变量要放在这个特定的命令中,有没有办法在不重写命令的情况下添加很多变量?

目录 c:\ /s /b /a | 找到“我的文件”

例如,我想搜索“我的文件”和其他 50 项内容。

感谢您的回答

4

3 回答 3

2

简而言之:没有。您必须重写命令,除非特定命令确实接受多个参数(可能是变量)。在你的情况下它没有,所以你需要重写它。

一种选择是使用findstr而不是find. 您可以传递多个搜索模式:

dir c:\ /s /b /a | findstr /c:"my file" /c:"other" /c:"other 2" ...

不过,我不知道这可以扩展到“其他 50 件事情”的程度如何,但这样的解决方案可能没有。也许您可以使用正则表达式(检查findstr /?)将文件名压缩为视图。

你也可以简单地做:

for /R c:\ %i in ("my file" "other" "other2") do @echo %i

但是,这两种解决方案都可以选择重复。他们基本上基于“包含”语义进行搜索。因此,“C:\foo\my file”和“C:\foo\bar\my file\something.txt”都将匹配。但是你原来的解决方案也有这个问题。

如果您可以使您的搜索模式独一无二或可以忍受误报,那么这应该不是问题。但是请注意它。

于 2012-07-17T04:22:51.110 回答
2

扩展 Christian 的建议以使用 FINDSTR 而不是 FIND - 您可以简单地将所有 50 个搜索词放在一个文本文件中,并使用该/G:"filename"选项引用它们。

但是有一个重要的警告 -搜索多个文字字符串时有一个讨厌的 FINDSTR 错误。请参阅为什么这个具有多个文字搜索字符串的 FINDSTR 示例找不到匹配项?.

如链接中所述,解决方法是使用该选项进行不区分大小写的搜索/I,或者使用带有该/R选项的正则表达式搜索词。

有关未记录的 FINDSTR 功能和错误的“完整”列表,请参阅Windows FINDSTR 命令的未记录功能和限制是什么?.

于 2012-07-17T15:43:13.780 回答
0

您可以将其包装在 for 循环中:

for %i in ("my file" "second file") do dir c:\ /s /b /a | find %i
于 2012-07-17T02:50:17.903 回答