我目前面临的问题是我需要在每个子目录中处理文件,我正在使用这样的 for 循环:
for /R %%x in (*.dat) do tool.exe -c -f -e "%%x"
现在它确实处理了除工具输出文件之外的所有内容,并且该文件始终位于启动批处理脚本的目录中,而不是原始文件所在的目录中。 我尝试了很多方法,比如使用 %CD% 作为该工具的输出目录选项,但看起来该工具不太喜欢那样,只是给出了错误。
我正在寻找一个通用的解决方案,因为我现在在使用很多 CLI 工具时遇到了这个问题。
最佳答案
我迟到了,但是,补充 Andriy 的回答,您可以通过组合两个 FOR 循环来简化 BAT,这可能会稍微更有效,也更清晰。
for /D /R %%d in (*) do (
pushd %%d
for %%x in (*.dat) do tool.exe -c -f -e "%%x"
popd
)
作为一个额外的好处,这个版本将解决主循环引用不同驱动器的情况(在这个特定的 OP 问题上不是这种情况)并且具有在每次迭代中恢复当前目录的相对值(value),如果循环中包含其他命令,这也可能不太重要。
关于windows - 使用/R 标志将批处理脚本的输出放入正确的子目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019464/