通俗彻底解读批处理的延迟变量

先说环境变量


一个批处理可以看成是一个程序,它的环境变量就是自己的全局变量。操作系统可以看成是一个大程序,它的环境变量同样也是全局变量,只不过为了和程序的环境变量区别,就叫做全局环境变量了,既然为了区别,那么叫系统环境变量岂不是更好。


再说延迟变量


脚本语言需要解释器解释执行。批处理在解释执行时会以语句为单位读取代码。假如前面有一个变量a=1,这句当中的所有读取a的运算中,比如输出a,a都会先被替换成1,再执行。

还是上代码吧:

@echo off
set a=1
set a=2 & echo %a%
echo %a%
pause
输出:


说明了:

1. 执行器读取一条语句后会进行变量值替换。如果读取语句的前面还有其他改变这个变量的命令,就会导致读不到最新的值。

2. 写成一行和写成两行是有区别的。

注意:

因为for和if作为一个语句,后面可以跟许多命令,不管跟多少命令,还是一条命令


延迟变量

光看名字不能顾名思义。那么就换一个说法来描述:

开启延迟变量就是读取变量最新值。

     记住这句话就行了,简单明了。它和c/c++中的volatile作用相同。


上代码

setlocal EnableDelayedExpansion
set a=1
set a=2 & echo !a!
echo %a%
pause
输出



注意,设置延迟变量后,变量读取时要用 !变量! 的形式,不用 %变量% ,不然还是读不到最新的值。


posted @ 2022-05-22 11:23  撬动未来的支点  阅读(477)  评论(0编辑  收藏  举报