,虽然已经给变量加了1,但是,值却不变(因为echo %num%中的%num%早已被替换为:0了)。
那么,要实现(for或者if)语句中的变量实时的变化(如这里,我就要将1 2 3 显示出来)要怎么办呢?那就要起
用延迟变量,先在批处理中申明:setlocal enabledelayedexpansion 然后,将语句:echo %num%改成!num!(也就
是将“%”改成“!”),这样就可以达到效果了,演示代码:
例2,
| @echo off Rem ''''///////下面先申明起用延迟变量///////////// setlocal enabledelayedexpansion set /a num=0 for /l %%i in (1 1 3) do ( Rem ================================ set /a num =1 Rem 变量num的值每次都加1 Rem ================================ Rem '''''''//////////////////下面的变量不能再用"%"括起来,而应该用"!"//////////// echo !num! ) pause>nul |
归纳总结:
1、为什么要用延迟变量?
让if语句和for语句中的变量实时变化;
2、什么时候用延迟变量?
一般是用在 for 语句和 if 语句中;
3、怎么用延迟变量?
先在批处理中申明起用延迟变量:setlocal enabledelayedexpansion
然后将 for 语句、if语句中的变量用两个"!"括起来即可
4、其实在使用变量嵌套变量也可以使用变量延迟的。
例3,
| @echo off set a=1 set b1=10 echo %b%a%% pause |
执行显示,得到 %b1%
其实我想得到的是 赋予b1的值,即 10 那么如何实现呢?将上例修改如下,
例4,
| @echo off set a=1&set b1=10 call,echo %%b%a%%% pause>nul |
call 这里实际是对命令行进行重新组织扩展,先扩展%%b%a%%%里面的%a%,使%a%变成a的值1,再用cal来扩展%b1%
。
也可以用变量延迟来实现,方法如下:
例5,
| @echo off set /a a=1,b1=10 Setlocal EnableDelayedExpansion echo:!b%a%! ... pause |
call 在这里的用法实际是变量延迟的一种快捷方式,变量延迟一般用在for的循环体里面。
call,%%b%a%%% 这里的逗号实际是一个分隔符,和空格一样,还有很多分隔符可用,比如上例中的 echo:!b%a%! ,
当然并不是所有的命令都可以这样用,看情况而定……
例6,
| @echo off&setlocal enabledelayedexpansion set a=1000 set b=dd set a%b%=9000 set c=!a%b%! echo %c% pause |
执行一下,看看显示的将是什么?为什么是这样?相信通过例4,例5你也能分析得出来吧?









