2

我目前面临的问题是我需要在每个子目录中处理文件,我正在使用这样的 for 循环:

for /R %%x in (*.dat) do tool.exe -c -f -e "%%x"

现在它会处理所有内容,但该工具会输出一个文件,并且该文件始终位于启动批处理脚本的目录中,而不是位于原始文件所在的目录中。我尝试了很多方法,例如使用 %CD% 作为该工具的输出目录选项,但看起来该工具不太喜欢那样,只是给出了错误。

我正在寻找一个通用的解决方案,因为我现在使用很多 CLI 工具都遇到了这个问题。

4

3 回答 3

4

I'm late on this but, complementing Andriy answer, you can streamline the BAT by combining two FOR loops, which might be slightly more efficient, and more clear.

for /D /R %%d in (*) do (
  pushd %%d
  for %%x in (*.dat) do tool.exe -c -f -e "%%x"
  popd
)

As an added bonus, this version will solve the case when the main loop refers to a different drive (which is not the case on this particular OP question) and has the relative side value of restoring the current directory on each iteration, which might also be of slight importance in case other commands are incorporated in the loop.

于 2012-10-23T10:01:16.553 回答
3

您可以在调用之前访问CD当前所在的目录:.dattool.exe

for /R %%x in (*.dat) do (cd "%%~dpx" & tool.exe -c -f -e "%%x")
于 2012-10-22T21:06:13.270 回答
1

你可以使用forfiles...

forfiles /s /C /m *.dat "cmd /c tools.exe @file"

有关详细信息,请参阅http://ss64.com/nt/forfiles.html

于 2012-10-22T20:56:36.557 回答