[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 使用set时候发现的一个关于变量的有趣现象

代码如下
  1. @echo off
  2. set a=123& set b=456
  3. set a=%b% &set b=%a%
  4. echo %a% & echo %b%
  5. pause>nul
复制代码

发现 a b互换了位置
不知道为什么
以为是在set命令中对变量不会随时跟随
我用
  1. @echo off
  2. set a=123& set b=456
  3. set a=%b% & echo %a% & set b=%a%
  4. echo %a%
  5. echo %b%
  6. pause>nul
复制代码

发现显示
123
456
123
这就糊涂了
为什么两次%a%的值不一样呢?

因为这一句:set a=%b% & echo %a% & set b=%a%
中的 echo %a%中的 变量a ,在这句运行之前就已被系统 “置换” 为123了。

TOP

请问变量置换的时机是什么呢?

那为什么 后面的%a%又没有呢?
能否讲解下变量置换的时间
使用变量延迟的原因好像也是这个

TOP

这就是变量延迟
() & |  && ||  这些都是复合语句,
在未开启延迟变量的情况下,这些变量要等到这一整句运行完后才有效.
技术问题请到论坛发帖求助!

TOP

测试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=123& set b=456
  4. set a=%b% & echo %a% & set b=%a%
  5. echo %a%
  6. echo %b%
  7. pause>nul
复制代码
开启了也是这样子
显示
123
456
123
好像变量延迟只使用于for语句

[ 本帖最后由 novaa 于 2007-11-19 18:51 编辑 ]
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

开启了延迟变量,要用!!符号来引用变量
你再试试下面的
  1. @echo off
  2. set a=123&set b=456
  3. echo 原变量的值 a=%a%  b=%b%
  4. echo\
  5. set a=%b%&set b=%a%
  6. echo 未开启延迟 a=%a%  b=%b%
  7. set a=123&set b=456
  8. setlocal enabledelayedexpansion
  9. set a=!b!&set b=!a!
  10. echo 开启延迟后 a=%a%  b=%b%
  11. pause>nul
复制代码
技术问题请到论坛发帖求助!

TOP

我晕
测试一下这个,不要老忘了延迟变量的用法;
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=123& set b=456
  4. set a=%b% & echo !a! & set b=%a%
  5. echo %a%
  6. echo %b%
  7. pause>nul
复制代码

TOP

受教了
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

比较简单的变量延迟问题,略懂!

TOP

返回列表