Windows批处理文件循环遍历子文件夹

4

我没有成功编写一个适当的批处理文件,希望得到一些帮助。

假设我有一个exe文件在D:\Test\目录下,叫做script.exe。 要执行这个script.exe文件,需要添加一个.bin文件作为附加参数(例如bin01.bin、bin02.bin)。

因此,执行命令将会是:script.exe -i bin01.bin, script.exe -i bin02.bin等

我想让脚本执行所有子文件夹内的.bin文件。

D:\Test\script.exe
D:\Test\Folder01\bin01.bin
D:\Test\Folder01\bin02.bin
D:\Test\Folder02\bin01.bin
D:\Test\Folder03\bin01.bin

请问有人能在这里帮帮我吗?非常感谢!


可能是 批处理文件:列出带有相对路径的目录中的所有文件 的重复问题。 - JonathanDavidArndt
1个回答

10

直接从命令提示符窗口执行:

for /R "D:\Test" %I in (*.bin) do @D:\Test\script.exe -i "%I"

在批处理文件中使用相同的命令行:

@for /R "D:\Test" %%I in (*.bin) do @D:\Test\script.exe -i "%%I"

命令FOR在目录D:\Test以及所有子目录中递归搜索符合通配符模式*.bin的文件。

每个找到的文件名都被赋予带有完整路径的区分大小写循环变量I

FOR对于每个文件执行可执行文件D:\Test\script.exe,第一个参数为-i,第二个参数为找到的文件的完整路径名称并用双引号括起来,以便匹配任何*.bin文件名称,即使这些文件名包含空格或以下字符之一:&()[]{}^=;!'+,`~

FOR命令行的整个开头处的@只是告诉Windows命令解释器cmd.exe在执行之前不要将预处理后的命令行回显到控制台窗口,默认情况下会回显。

D:\Test\script.exe开头处的@避免了每次循环迭代时在控制台上输出此命令。

大多数情况下,在批处理文件的开头处使用@echo off来关闭执行前的命令行回显,如下所示。

@echo off
for /R "D:\Test" %%I in (*.bin) do D:\Test\script.exe -i "%%I"

为了理解所使用的命令及其工作原理,打开一个命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • for /?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接