分类：电脑/网络
问题：请懂批处理的朋友,高手帮忙给解释一下请问为什么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   echo请问为什么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   echo !var!)pause
回答：因为命令解释器(%comspec%)在执行for命令时，首先将for命令里的变量扩展为变量的值，所以，当我们执行时，有的变量是根据for命令得到的，这样，变量还没有被定义就被命令解释器给解释(扩展)了，显然是得不到我们想要的，如果要for命令执行之后再扩展变量的值，那么就要启用变量延迟功能来达到这个目的。要启用变量延迟功能，必须在for命令之前首先定义它，用"setlocal ENABLEDELAYEDEXPANSION"就可以开启变量延迟功能。当再次引用变量时，就要用两个"!"将变量包含起来(比如"!var!")，以扩展变量的为其值。