1. bat中用set定义的变量默认是全局变量(也称环境变量)

2. bat中读取变量时,要把变量用%或!括起来,如%errorlevel%,表示非延迟变量;而!errorlevel!表示延迟变量

详见

bat 环境变量延迟

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 转义字符

指向原始笔记的链接

3. 用setlocal和endlocal设置局部变量

3.1. 语法:

setlocal
::在这个范围变量的改动只在这个区域内有效


endlocal
::变量的改动撤销,变量恢复成setlocal之前