在 Bat 脚本中,变量的默认扩展方式是即时扩展 (Immediate Expansion)。这意味着,当 Bat 解释器解析一个命令行或一个代码块(用括号 () 括起来的一组命令)时,它会立即用变量的当前值替换所有用百分号%
括起来的变量引用(例如%str%
)。
问题出现在当你需要在同一个代码块内部修改一个变量,并且希望在该代码块内部的后续命令中立即使用这个修改后的新值时。由于即时扩展是在代码块开始执行之前进行的,整个块在解析时会使用变量的旧值,而不是你在块内部更新后的值。
为了解决这个问题,Bat 提供了变量延迟扩展。启用延迟扩展后,你可以使用感叹号!
来引用变量(例如!str!
)。当 Bat 解释器执行到一个使用!var!
的命令时,它会当时去获取变量 var 的最新值。
一般可能比较难理解,我遇到的就是 if 里面 for 循环赋值输出不正确。需要用!str!