批处理:for循环中的变量不会更改

时间:2018-01-18 15:05:15

标签: batch-file variables for-loop

我正在尝试创建一个批处理文件,该文件可以对目录中的所有PDF文件执行各种操作。这些是我文件的第一行:

SETLOCAL EnableDelayedExpansion
FOR /R "C:\Daten\test" %%f IN (*.pdf) DO (
 set _currentpdf=%%f
 echo %_currentpdf%
 call %~dp0\sumatrapdf.exe %_currentpdf%
 pause
 )

我不明白的是,当运行批处理时,“set _currentpdf =”行显示正确(即每个循环执行的正确文件显示在=之后),但值仍然保持不变但总是设置为for循环的第一个执行之一。 导致Echo和sumatrapdf一次又一次地显示第一个文件......?!

感谢任何启蒙!

1 个答案:

答案 0 :(得分:0)

您应该使用Start命令而不是Call命令。

我建议:

SetLocal EnableDelayedExpansion
For /R "C:\Daten\test" %%f In (*.pdf) Do (
    Set "_currentpdf=%%f"
    Echo !_currentpdf!
    Start "" "%~dp0sumatrapdf.exe" "!_currentpdf!"
    Pause
)

您规定延迟扩展,但未将 % 替换为您希望延迟扩展的变量中的 !

或者你可以忘记完全延迟扩展,因为不需要在循环中设置任何变量:

For /R "C:\Daten\test" %%f In (*.pdf) Do (
    Echo %%f
    Start "" "%~dp0sumatrapdf.exe" "%%f"
    Pause
)

还要考虑到您的Pause命令会在每个pdf标签页打开之间失去焦点。