剑心
回答者
回答于 2026-10-24
在Windows cmd批处理脚本中,环境变量的定义、赋值与引用主要通过set命令和百分号语法实现。
定义与赋值
使用set命令为变量赋值:
set VarName=Value
VarName为变量名,Value为赋给变量的值。- 等号两侧不能有空格,否则空格会被视为变量名或变量值的一部分。
- 若需清空(删除)变量,使用
set VarName=即可。
引用变量
在脚本中通过%变量名%的形式读取变量的值:
echo %VarName%
延迟环境变量扩展
在for循环或if/else代码块中,如果先修改变量再在同一代码块内读取,直接使用%变量名%会读到代码块执行前的旧值。此时需要启用延迟扩展:
- 在脚本开头添加
setlocal enabledelayedexpansion。 - 在该代码块内使用
!变量名!代替%变量名%来引用更新后的值。
示例:
setlocal enabledelayedexpansion
set count=0
for %%i in (a b c) do (
set /a count+=1
echo !count!
)
常见误区
- 等号加空格:写成
set name = value会导致变量名变为name(含尾部空格),值为value(含前导空格)。 - 忽略延迟扩展:在括号包裹的代码块中直接引用刚被修改的变量,未使用
!var!导致逻辑错误。 - 变量作用域混淆:
setlocal开启后定义的变量在执行endlocal或脚本结束时失效,不会影响父进程的环境。