批处理文件中的嵌套目录搜索

时间:2014-11-11 12:43:15

标签: batch-file

我正在尝试在几个目录上运行递归循环。这有效:

FOR /R "Dir1" %%f IN (*.c *.cpp *.h) DO (
  echo %%f
)
FOR /R "Dir2" %%f IN (*.c *.cpp *.h) DO (
  echo %%f
)

但是因为这很愚蠢(echo部分实际上是一个命令块,并且目录的数量很大),我试过这个:

FOR %%d IN (Dir1 Dir2) DO (
  FOR /R "%%d" %%f IN (*.c *.cpp *.h) DO (
    echo %%f
  )
)

哪个不起作用(它没有运行任何东西)。有没有办法让这个工作?

1 个答案:

答案 0 :(得分:2)

由于某种原因,FOR /R不喜欢后期扩展变量作为搜索路径。我运行ProcMon并发现cmd.exe实际上是在尝试访问名为%d的文件/目录!

/R的一个记录功能是,如果您遗漏目录,它将搜索CWD。 我用这个来提出一个看似有效的脚本的改变形式。

FOR %%d IN (Dir1 Dir2) DO (
    PUSHD "%%~d"
    FOR /R %%f IN (*.c *.cpp *.h) DO (
        ECHO %%f
    )
    POPD
)

FWIW,为了脚本可维护性,如果有多个目录,而不是在命令中列出它们,我会把目录放在一个单独的文本文件中搜索并使用FOR /F进行迭代在他们身上。也许你只是这样编写它来提供一个最小的工作示例。