如何将多个变量输入到单个批处理命令中

时间:2012-07-16 23:36:19

标签: windows batch-file cmd dos

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

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

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

感谢答案

3 个答案:

答案 0 :(得分: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”都匹配。但是,你原来的解决方案也有这个问题。

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

答案 1 :(得分:2)

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

但有一个重要的警告 - 在搜索多个文字字符串时存在令人讨厌的FINDSTR错误。请参阅Why doesn't this FINDSTR example with multiple literal search strings find a match?

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

有关未记录的FINDSTR功能和错误的“完整”列表,请参阅What are the undocumented features and limitations of the Windows FINDSTR command?

答案 2 :(得分:0)

你可以把它换成for循环:

for %i in ("my file" "second file") do dir c:\ /s /b /a | find %i