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

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

运行上面的代码后,复合语句中所赋的值全部显示出来了,这说明什么呢?

说明,在复合语句中,并不是没有给变量赋值,只是你若没有开启延迟变量,你就没法在复合语句中提取到它,要
等复合语句运行完毕后,才能提取到。

变量的表示方法:两种:  1、%var%   2、!var!
第一种表示方法,大家都知道,第二种就是引用 延迟的变量。
在开启了延迟变量的情况下,如果在复合语句之外,用哪种方法表示都可以。但是你若要在复合语句中引用复合语
句即时得到的变量,就要用第二种方法。看例子

例4,

@echo off setlocal EnableDelayedExpansion set var=abc for /l %%i in (1 1 10) do ( set var=%%i echo %var% echo !var! ) Pause

注意:例子中有两个echo 一个是显示 %var% 一个是显示 !var!
结果很明白了,%var% 显示的结果是复合语句之前变量var的值,而 !var! 显示的就是复合语句中即时得到的值。

例5,

@echo off setlocal EnableDelayedExpansion for /l %%i in (1 1 5) do ( set var%%i=%%i ) echo %var1% %var2% %var3% %var4% %var5% echo !var1! !var2! !var3! !var4! !var5! pause

这个例子说明什么,不用再解释了吧?
说明在开启了延迟变量的情况下,且在复合语句之外,用两种方法都可以表示变量。就说到这吧。以上的解释,完
全是出于个人的理解,也是为方便非专业人士理解,解释肯定有错误的地方、就象学习英语时,为方便记忆,用汉
字的读音来作解释一样。呵呵,是一种“偏门”各位新手千万不要把以上所说的当成是“真理”,否则就变成是“
误人”了。


四,什么时候使用延迟变量?如何使用?

  什么时候使用延迟变量?如何使用?这些一直是使新手困惑的地方,那到底是怎么样的呢?那请看下面的例子,
我们将一步步引导大家。

例1,

@echo off set /a num=0 for /l %%i in (1 1 3) do ( Rem ================================ set /a num =1 Rem 原意是变量num的值每次都加1 Rem ================================ echo %num% ) pause>nul

  先猜猜看,运行之后的结果是什么呢?你是不是认为它会显示:1 2 3 呢?我想大部分人会这么认为。你再将以
上代码保存为批处理文件,运行,看看结果。
你会看到,显示的结果并不是意料中的 1 2 3 而是 0 0 0,这个是为什么呢?

  原来这个是因为,批处理在处理for 或者if 语句中的变量时,先要进行预处理,把其中的用%%括起来的变量,先
替换为语句之前的变量(如上面的代码,for语句中的%num%早就被替换为语句前的 值:0),所以,for语句运行时

相关文章 大家在看