废话少说,先让我们来看一段代码: | @echo off | | set /a num=0 | | for /l %%i in (1 1 3) do ( | | | | set /a num+=1 | | | | | | echo %num% | | ) | | pause>nulCOPY |
先猜猜看,运行之后的结果是什么呢?
你是不是认为它会显示:1 2 3 呢?我想大部分人会这么认为。
你再将以上代码保存为批处理文件,运行,看看结果。
你会看到,显示的结果并不是意料中的 1 2 3 而是 0 0 0,这个是为什么呢?
原来这个是因为,批处理在处理for 或者if 语句中的变量时,先要进行预处理,把其中的用%%括起来的变量,先替换为语句之前的变量(如上面的代码,for语句中的%num%早就被替换为语句前的 值:0),所以,for语句运行时,虽然已经给变量加了1,但是,值却不变(因为echo %num%中的%num%早已被替换为:0了)。
那么,要实现(for或者if)语句中的变量实时的变化(如这里,我就要将1 2 3 显示出来)要怎么办呢?那就要起用延迟变量,先在批处理中申明:setlocal enabledelayedexpansion
然后,将语句:echo %num%改成!num!(也就是将“%”改成“!”),这样就可以达到效果了,演示代码: | @echo off | | | | setlocal enabledelayedexpansion | | set /a num=0 | | for /l %%i in (1 1 3) do ( | | | | set /a num+=1 | | | | | | | | echo !num! | | ) | | pause>nulCOPY |
以上的解说到此为止,时间仓促,词不尽意,还有什么不明白的,跟贴说明。
归纳总结:
1、为什么要用延迟变量?
让if语句和for语句中的变量实时变化;
2、什么时候用延迟变量?
一般是用在 for 语句和 if 语句中;
3、怎么用延迟变量?
先在批处理中申明起用延迟变量:setlocal enabledelayedexpansion
然后将 for 语句、if语句中的变量用两个"!"括起来即可 |