我正在尝试在几个目录上运行递归循环。这有效:
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
)
)
哪个不起作用(它没有运行任何东西)。有没有办法让这个工作?
答案 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
进行迭代在他们身上。也许你只是这样编写它来提供一个最小的工作示例。