请懂批处理的朋友,高手帮忙给解释一下请问为什么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!"),以扩展变量的为其值。