我正在尝试创建一个批处理文件,该文件可以对目录中的所有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一次又一次地显示第一个文件......?!
感谢任何启蒙!
答案 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标签页打开之间失去焦点。