批量:使用循环搜索文件名中的关键字

Batch: Searching for keywords in file names using a loop

我目前正在编写一个小脚本,该脚本应该在目录中搜索特定关键字。我当前的代码如下所示:

dir /b /s *<keyword_1>* > results.txt
dir /b /s *<keyword_2>* >> results.txt
dir /b /s *<keyword_3>* >> results.txt
dir /b /s *<keyword_n>* >> results.txt

为了避免对 n 个额外的关键字使用相同的命令,我想改用循环。由于我对批处理脚本很陌生,所以我已经发现 for %%f 在这种情况下可能会帮助我。可能看起来像这样:

for %%f in (*keyword_1* *keyword_2* *keyword_3* *keyword_n*) do (
dir /b /s *<keyword_xy>* >> results.txt
)

我现在的问题是如何将循环中的命令与相应的关键字连接起来? (首先是关键字 1,然后是关键字 2,依此类推...)?也许还有一种更简单的方法来完成工作。 :)

你可以这样做:

for %%f in (*keyword_1* *keyword_2* *keyword_3* *keyword_n*) do (
dir /b /s %%f >> results.txt
)

更多信息 or Link2

这个任务完全不需要任何

@Dir /B /S /A -D -S -L *keyword_1* *keyword_2* *keyword_3* *keyword_n* > results.txt

或必要时使用双引号:

@Dir /B /S /A -D -S -L "*keyword_1*" "*keyword_2*" "*keyword_3*" "*keyword_n*" > "results.txt"

我只对 select 文件使用了额外的过滤器,而不是文件和目录,并排除了具有系统属性的文件,以及 junctions/mount points/symbolic 链接的文件.要了解有关这些选项的更多信息,请打开命令提示符 window,键入 dir /?,按 ENTER 键,然后阅读显示的信息。


鉴于您提供的示例,这无疑不能反映您的实际任务,我想您甚至可以使用:

@Dir /B /S /A -D -S -L "*keyword_*" > "results.txt"

顺便说一句,即使您打算使用 For 循环,您仍然会尽可能地减少它:

@(For %%I In (1 2 3 n) Do @Dir /B /S /A -D -S -L "*keyword_%%I*") > "results.txt"

如果您提供更真实的搜索字符串示例,我们可以提供更有针对性的解决方案。