木子屋 Dnawo's BLOG

什么是延迟环境变量扩充

👤 dnawo 📅 2008-04-28 👁 5827 👍 0 💬 1 🔄 来源:本站原创
我们先来看个例子:

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

diy 2008-04-28 14:36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
验证码
评论需审核通过后显示
← 上一篇 简单设置实现Windows2003开机自动拨号 下一篇 → 批处理小技巧汇总