使用 .bat 文件循环遍历 folders/subfolder 并提供 folder/subfolder 作为 exe 的输入

Use .bat file to loop through folders/subfolder and and provide the folder/subfolder as input to an exe

我必须 运行 一个存储在特定文件夹中的工具 (.exe)。(比如 C:\Temp)
此工具的输入参数是放置在各种其他 folders/subfolders 中的 (.inf) 文件。(比如 C:\Test\SampleInfFiles、C:\Test\SampleInfFiles\Inf2)

我想创建一个批处理文件,我可以在其中 运行 在各个文件夹上递归使用此工具。

我不确定如何将 inf 的文件夹名称作为输入参数提供给该工具。

@echo off 
for /r /d C:\Test\SampleInfFiles %%x in (dir /b *.inf) do(
pushd "%%x"
call C:\Test\ScanInf.exe
popd
)

我对这一切都是陌生的。你能帮忙创建一个批处理文件吗?

如果我没理解错的话,您需要为可执行文件指定包含一个或多个 inf 文件的文件夹,而不是 inf 文件本身。

显然参数的顺序很重要。 for 期望 /r 之后的部分是路径。此外,您可以仅将 * 指定为一个集合。

循环现在浏览给定文件夹的所有子文件夹。在循环内,它将检查该文件夹是否包含 inf 文件(在该级别)。如果是,则使用文件夹作为参数调用可执行文件。注意变量中 ~ 的使用。这会去除任何引号,因此您可以安全地添加引号而不必冒使用双引号的风险。

@echo off 
for /d /r C:\Test\SampleInfFiles\ %%x in (*) do (
  pushd "%%~x"
  if exist %%x\*.inf call C:\Test\ScanInf.exe "%%~x"
  popd
)

参见:Using batch parameters

这里作为一个很好的单行:

for /R "C:\Test\SampleInfFiles" /D %%X in (*.*) do if exist "%%~fX\*.inf" call C:\Test\ScanInf.exe "%%~fX"

如果您想 运行 直接在命令提示符中,将每个 %% 替换为 %

我认为 call 命令可以省略。