延迟环境变量的用途
- 非延迟环境变量:执行命令的时候,命令解释器会先将命令读取,如果命令中有环境变量,那么就会将变量的值先读取来出,然后在运行这条命令,如:echo %windir%,当我们执行这条命令的时候,命令解释器会先读出%windir%的值,即c:\windows,然后执行echo,得到的结果是屏幕上显示出c:\windows。但是当我们在执行一条命令的时候,命令解释器将环境变量的值读出来之后,环境变量再发生变化,此时再执行命令就是变量改变前的值。
set a=1
set a=2 & echo %a%
echo %a%
- 延迟环境变量:当开启延迟环境变量之后,命令解释器不再是运行命令前去读取环境变量,而是用到环境变量的时候才去读取。想使环境变量延迟读取,我们就要用到!name!来代替%name%。使用最多的地方就是for和if语句中,因为for和if作为一个语句,后面可以跟许多命令,不管跟多少命令,但他还是一条命令,所以说在for和if中应用的最多。
setlocal EnableDelayedExpansion
set a=1
set a=2 & echo !a!
echo %a%
设置延迟环境变量
- cmd下开启/关闭延迟环境变量
延迟环境变量在cmd下默认是关闭的
cmd /v:on //开启延迟环境变量
cmd /v:off //关闭延迟环境变量
- 批处理中开启/关闭延迟环境变量
setlocal EnableDelayedExpansion //开启延迟环境变量
setlocal DisableDelayedExpansion //关闭延迟环境变量