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
Windows批处理中的setlocal与变量延迟详解
文章介绍了在Windows批处理文件中,setlocal命令用于限制环境变量的更改只在当前批处理脚本内生效,并详细阐述了变量延迟的概念,以及如何通过enabledelayedexpansion来实现变量的动态更新,以解决批处理中变量预处理的问题。示例展示了启用延迟后如何正确地设置和使用变量。
1252

被折叠的 条评论
为什么被折叠?



