我正在尝试创建一个批处理文件,对目录中的所有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总是一次又一次地显示第一个文件.?!
谢谢你的开悟!
发布于 2018-01-18 15:46:26
您应该使用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选项卡开放。
https://stackoverflow.com/questions/48324337
复制相似问题