变量延迟 setlocal EnableDelayedExpansion
在复合语句中才要使用延迟变量。也就是说在复合语句中或者外面是访问不到复合语句中定义的变量,只能通过变量延迟来解决
@echo off
for /l %%i in (1 1 10) do (
set var=%%i
echo %var%
)
结果:显示10个echo处于关闭状态。
分析:cmd把var的值当作复合语句之前的值来引用,
这就是因为没有开启 延迟变量 的缘故,cmd把var的值当作复合语句之前的值来引用,
@echo off
setlocal EnableDelayedExpansion
set var=abc
for /l %%i in (1 1 10) do (
set var=%%i
echo %var%
echo !var!
)
pause
结果为:abc 1 abc 2 abc 3……
分析:%var% 显示的结果是复合语句之前变量var的值,
而 !var! 显示的就是复合语句中即时得到的值。