[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
正在准备写一篇 有关 延迟变量使用 示例方面的文章(下周可能会出来吧?!),不过暂时没时间,要做的工作太多!

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

TOP

废话少说,先让我们来看一段代码:
  1. @echo off
  2. set /a num=0
  3. for /l %%i in (1 1 3) do (
  4.      Rem ================================
  5.      set /a num+=1
  6.      Rem 原意是变量num的值每次都加1
  7.      Rem ================================
  8.      echo %num%
  9. )
  10. pause>nul
复制代码
先猜猜看,运行之后的结果是什么呢?
你是不是认为它会显示: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!(也就是将“%”改成“!”),这样就可以达到效果了,演示代码:
  1. @echo off
  2. Rem ''''///////下面先申明起用延迟变量/////////////
  3. setlocal enabledelayedexpansion
  4. set /a num=0
  5. for /l %%i in (1 1 3) do (
  6.      Rem ================================
  7.      set /a num+=1
  8.      Rem 变量num的值每次都加1
  9.      Rem ================================
  10.      Rem '''''''//////////////////下面的变量不能再用"%"括起来,而应该用"!"////////////
  11.      echo !num!
  12. )
  13. pause>nul
复制代码
以上的解说到此为止,时间仓促,词不尽意,还有什么不明白的,跟贴说明。

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

评分人数

TOP

返回列表