什么是延迟环境变量扩充

我们先来看个例子:

@echo off

set /a m=0,n=0
if %m%==0 (
    set /a m=%m%+1
    echo m=%m%
)
for %%i in (1 2 3 4 5) do set /a n=%n%+1
echo n=%n%

pause>nul

执行结果为:

m=0
n=1

不是我们预期的:

m=1
n=5

什么原因呢?因为在读到if/for语句时,if/for主体中的所有环境变量都先被扩充了(替换成他的值),这就可以解释执行的结果了,那怎么才能得到我们预期的结果呢?延迟环境变量扩充即可:

@echo off & setlocal enabledelayedexpansion

set /a m=0,n=0
if %m%==0 (
    set /a m=!m!+1
    echo m=!m!
)
for %%i in (1 2 3 4 5) do set /a n=!n!+1
echo n=%n%

pause>nul

注意:启用延迟环境变量扩充后,引用需要延迟扩充的环境变量不再是在名称两边加%,而是用!。

评论: 1 | 引用: 0 | 查看次数: 5400
diy[2008-04-28 02:36 PM | | | 125.67.128.10 | del | 回复回复]
沙发
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
发表评论
登录后再发表评论!