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

2019-09-19 06:37:04丽君

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

相关文章 大家在看