批处理for循环变量值不更新问题求助
解决批处理循环中变量始终取首次值的问题
这问题我太熟了!你已经开了延迟变量展开,但没用到点子上——循环里动态变化的变量,得用!变量!而不是%变量%来引用。
问题原因
批处理对代码块(比如FOR循环的大括号包裹部分)有个预解析机制:在执行整个代码块之前,会把所有%变量%形式的引用替换成变量当时的静态值。你这里虽然在循环里给_currentpdf赋值了,但%_currentpdf%在循环开始前就被解析成了第一次循环的初始值,后面循环里不管变量怎么变,这个引用都不会更新。
而你开启的EnableDelayedExpansion,就是用来解决这个问题的——它允许用!变量!的方式,让变量在执行到该行时才动态取值,而不是提前解析。
修改后的代码
把%_currentpdf%换成!_currentpdf!就行:
SETLOCAL EnableDelayedExpansion FOR /R "C:\Daten\test" %%f IN (*.pdf) DO ( set _currentpdf=%%f echo !_currentpdf! call %~dp0\sumatrapdf.exe !_currentpdf! pause )
额外优化:直接使用循环变量
其实你完全可以省掉_currentpdf这个中间变量,直接用%%f,这样连延迟变量展开都不用纠结:
FOR /R "C:\Daten\test" %%f IN (*.pdf) DO ( echo %%f call %~dp0\sumatrapdf.exe %%f pause )
这样代码更简洁,也避免了变量引用的坑。
内容的提问来源于stack exchange,提问作者Moriarty
相关产品推荐
相关产品推荐

