Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338132
  • 博文数量: 38
  • 博客积分: 1289
  • 博客等级: 中尉
  • 技术积分: 533
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-10 22:30
个人简介

Good Good Study. Day Day Up.

文章分类

全部博文(38)

文章存档

2018年(1)

2016年(3)

2015年(12)

2014年(7)

2013年(10)

2012年(5)

分类: 系统运维

2013-09-12 14:34:35

前几天,一位网友问我,下面这段BAT的for命令第一次循环时为什么没有取到值。
@echo on
setlocal enabledelayedexpansion
for %%i in (ChinaUnix ITPUB) do (
    set bbs=%%i
    echo !bbs!
)

我问他是怎样得出这个结论的。他说在CMD窗口里面运行的时候发现的:

d:\Test>test.bat

d:\Test>setlocal enabledelayedexpansion

d:\Test>for %i in (ChinaUnix ITPUB) do (
set bbs=%i
 echo !bbs!
)

d:\Test>(
set bbs=ChinaUnix
 echo !bbs!
)
ChinaUnix

d:\Test>(
set bbs=ITPUB
 echo !bbs!
)
ITPUB

其实,问题的关键是他没有理解 @echo on 这个命令的作用。当echo on处于开启状态时,批处理在执行每条语句之前都会先显示一遍。也就是说,上面红色字体的部分并不是for命令的第一次循环,而是for命令在执行之前的一次回显而已。

友情提示,命令回显默认是处于开启状态的,除非你在代码首行用 @echo off 把它关闭。
阅读(2376) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~