bat-变量延迟

setlocal

开始批处理文件中环境改动的本地化操作,执行setlocal后的环境改动仅限于批处理文件,还原设置必须执行endlocal

bat处理机制

set a=1

按行读取,执行前先做预处理,将变量值扩展到实际值
set b=%a%
预处理时为,set b=1

if、for等括号内的内容,是当做一条语句来处理,而不是多条语句
if %a%==1 (
set a=2
echo %a%
)
预处理时为,set a=2 & echo 1

因此,需要使用变量延迟,确保前一条语句运行后再运行后一条语句

变量延迟

// 开启变量延迟
setlocal enabledelayedexpansion
// 关闭变量延迟
setlocal disabledelayedexpansion

变量要使用! !,不能用% %

举例

运行结果为 ECHO 处于关闭状态。
第三行预处理为set var2=1 & echo,相当于执行了echo,所以结果就会输出 ECHO 处于关闭状态。

@echo off 
set var1=1
set var2=%var1% & echo %var2%
pause

单独成行,先后运行,使用% %,运行结果为 1

@echo off 
set var1=1
set var2=%var1%
echo %var2%
pause

同时运行,添加变量延迟,使用!!,运行结果为 1

setlocal enabledelayedexpansion
@echo off 
set var1=1
set var2=%var1% & echo !var2!
pause

猜你喜欢

转载自blog.csdn.net/WEB___/article/details/128967677