- 请懂批处理的朋友,高手帮忙给解释一下请问为什么ECHO的是123
- 请问为什么HO的是12345,而不是5个test,test怎么没用?
@echo off
setlocal enabledelayedexpansion
set var=test
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!
)
pause
请问为什么既不是5个test也不是12345,而是5个!var!
@echo off
set var=test
for /l %%i in (1,1,5) do (
set var=%%i
- 因为命令解释器(%comspec%)在执行for命令时,首先将for命令里的变量扩展为变量的值,所以,当我们执行时,有的变量是根据for命令得到的,这样,变量还没有被定义就被命令解释器给解释(扩展)了,显然是得不到我们想要的,如果要for命令执行之后再扩展变量的值,那么就要启用变量延迟功能来达到这个目的。要启用变量延迟功能,必须在for命令之前首先定义它,用"setlocal ENABLEDELAYEDEXPANSION"就可以开启变量延迟功能。当再次引用变量时,就要用两个"!"将变量包含起来(比如"!var!"),以扩展变量的为其值。