使用.bat文件循环遍历文件夹/子文件夹,并提供文件夹/子文件夹作为exe的输入

时间:2015-07-30 18:25:49

标签: windows batch-file recursion directory

我必须运行存储在特定文件夹中的工具(.exe)。(说C:\ Temp)
此工具的输入参数是放置在各种其他文件夹/子文件夹中的(.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
)

我是这一切的新手。你能帮忙创建一个批处理文件吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要将包含一个或多个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

答案 1 :(得分:0)

这是一个不错的单行:

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

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

我认为call命令可以省略。