1. 实例:

1. 未设置环境变量延迟:

@echo off
set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)
echo %VAR%

输出结果:

after

2. 设置环境变量延迟:**

@echo off
setlocal enabledelayedexpansion
set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)
echo %VAR%
endlocal

注意区别是:

  1. 用setlocal enabledelayedexpansion和endlocal设置了局部延迟环境变量区域 输出结果
If you see this, it worked
after

2. 作用:

在复合语句中,只有执行到了复合语句中的对应命令,对应的变量名才会被替换

3. 关于!的问题

在延迟环境变量区域 没有转义的!只能用于调用环境变量 如果想要打印!或者使用!运算符,需要用两个^^进行转义,详见bat 转义字符