@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)