在BAT脚本中,命令块(如`for`循环或`if`语句)内变量值不更新是一个常见问题。这是因为默认情况下,批处理脚本会在命令块开始前解析所有变量,导致后续对变量的修改无法被识别。为解决这一问题,需要启用变量延迟扩展。
启用方法:在脚本开头使用`setlocal enabledelayedexpansion`,并将变量用`!`代替 `%` 来引用(例如`!var!`)。这样,变量会在每次遇到时动态解析,而非预先解析。
例如,在循环中累加变量:
```bat
setlocal enabledelayedexpansion
set /a sum=0
for /l %%i in (1,1,5) do (
set /a sum+=%%i
echo Current sum is !sum!
)
```
若未启用延迟扩展,`%sum%`将始终显示初始值。通过上述方法,可确保变量在命令块内实时更新,避免逻辑错误。