dos 环境变量延迟扩展enabledelayedexpansion详解

2019-01-29 21:08:15于海丽

,虽然已经给变量加了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你也能分析得出来吧?

您可能感兴趣的文章:

批处理中setlocal enabledelayedexpansion的作用详细整理cmd SETLOCAL使用介绍
相关文章 大家在看