返回列表 发帖
正在准备写一篇 有关 延迟变量使用 示例方面的文章(下周可能会出来吧?!),不过暂时没时间,要做的工作太多!

等下如果有空的话,我就先举几个例子吧!

TOP

废话少说,先让我们来看一段代码:
@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>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
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>nulCOPY
以上的解说到此为止,时间仓促,词不尽意,还有什么不明白的,跟贴说明。

归纳总结:
1、为什么要用延迟变量?
让if语句和for语句中的变量实时变化;
2、什么时候用延迟变量?
一般是用在 for 语句和 if 语句中;
3、怎么用延迟变量?
先在批处理中申明起用延迟变量:setlocal enabledelayedexpansion
然后将 for 语句、if语句中的变量用两个"!"括起来即可
2

评分人数

TOP

返回列表