什么是延迟环境变量扩充
编辑:dnawo 日期:2008-04-28
我们先来看个例子:
执行结果为:
不是我们预期的:
什么原因呢?因为在读到if/for语句时,if/for主体中的所有环境变量都先被扩充了(替换成他的值),这就可以解释执行的结果了,那怎么才能得到我们预期的结果呢?延迟环境变量扩充即可:
注意:启用延迟环境变量扩充后,引用需要延迟扩充的环境变量不再是在名称两边加%,而是用!。
复制内容到剪贴板
程序代码

@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
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
n=1
不是我们预期的:
复制内容到剪贴板
程序代码

m=1
n=5
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
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





!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
发表评论
请登录后再发表评论!