DOS 延迟变量扩展
DOS 延迟变量扩展
一、核心命令
setlocal enabledelayedexpansion
作用:开启延迟变量扩展;同时创建局部变量作用域。
二、三类符号区分
%%x
FOR循环专属循环变量,仅在for内部使用;脚本内for必须双百分号。%var%
普通变量,预解析:整行/代码块执行前一次性替换完成。!var!
延迟扩展变量,实时解析:运行到该行时才读取变量最新值;必须开启enabledelayedexpansion才能生效。
三、批处理底层铁律
( )包裹的代码块(for/if内部):
默认一次性扫描全文,提前替换所有%var%;
块内循环变量动态变化时,%数组[%%x]%无法正确解析下标。
四、数组循环固定写法
错误
%nets[%%n]%
执行前不会解析%%n,直接当成文本,取值失败。
正确
!nets[%%n]!
解析顺序:运行时先算出%%n的值 → 再读取对应数组元素。
五、使用场景速判清单
✅ 必须开启延迟扩展、使用!var!
- for / if
( )代码块内修改变量,紧接着读取 - FOR循环中用循环变量当下标访问数组(你的场景)
❌ 不需要延迟扩展
脚本顶层单行代码、不需要动态刷新变量值,直接用%var%
六、极简口诀
循环变量双百分
%%x
普通变量百分包%var%
块内动态要实时,感叹号!var!
数组下标带循环,固定格式!arr[%%x]!
感叹号生效前提:setlocal enabledelayedexpansion
七、最简模板直接套用
@echo off
setlocal enabledelayedexpansion
::定义数组
set arr[0]=A
set arr[1]=B
::遍历
for /l %%n in (0,1,1) do (
echo !arr[%%n]!
)

浙公网安备 33010602011771号