这个问题……没看懂……是不是在问 “变量延迟”啊?提到这个名词我就怕……
还是要有个人的理解的好。
我知道这些:
set n=1
可以直接在for中获得变量n
for %%a in (test) do echo %n%
然而 在for之中建立的变量,要再次在for中使用,就要启用
setlocal enabledelayedexpansion (又是名词--启用变量延迟……)
然后例子是
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,10) do (
set /a n=%%a+%%a
echo !n!
)
pause
这个时候变量的表示方法是!ver! 可以改成echo %n% 试下结果
假如这个for的前面没有加setlocal enabledelayedexpansion
还有一个例子也能成功
@echo off
for /l %%a in (1,1,10) do (
set /a n=%%a+%%a
call,echo,%%n%%
)
pause
顶楼代码中 for中用到了两个变量。但是交错了
像for中的这段set hang%%a=!zero:~0,%%a!
假如不启用变量延迟,变量表示是用:set hang%%a=%zero:~0,%%a%
看到了什么?很多百分号,系统会难以区分,于是启用变量延迟,用百分号和
感叹号 达到区分的作用。(只是个人见解)
当然还有别的用途,for和 if 等都是复合语句,用一个例子表示
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,10) do (
echo %time% !time!
ping -n 1 127.1>nul
)
pause
看到了什么?
这就是!! 和%%的其中一个区别(晕 语言表达不好……看不清楚就多测试
多找代码)
貌似可以这样解释:在复合语句中(同一句),变量始终代表初始值,在
这个句子中做的改变,要在下一句才能得到体现。
但可以通过变量延迟改变这个。用例子表示:
@echo off
setlocal enabledelayedexpansion
set n=0
set /a n+=1 &echo %n% &echo !n!
::上面的句子虽然用了&但始终是同一句,%n%还是代表句子前面建立的n.!n!会是+1后的n
echo %n%
::这是下一句,%n%已经是改变后的了。
pause
Last edited by 523066680 on 2008-8-15 at 04:52 PM ]