前几天,一位网友问我,下面这段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 把它关闭。
阅读(2511) | 评论(0) | 转发(0) |