批处理脚本:将参数存入数组后无法读取元素的问题求助
批处理数组赋值错误分析与修复
问题根源
你的代码中数组索引的计算逻辑存在错误:
set Environments[!i! - 2]=%%X
批处理不会自动解析变量名中的算术表达式,!i! - 2会被直接当作变量名的一部分。比如当i=3时,实际创建的变量是Environments[3 - 2],而非你期望的Environments[1],后续调用!Environments[1]!自然获取不到对应值。
修复方案
先单独计算出正确的索引值,再用该索引给数组赋值:
- 在else块内新增一行,计算索引:
set /A idx=!i!-2 - 用计算好的索引完成数组赋值:
set Environments[!idx!]=%%X
修正后的完整代码
setlocal enabledelayedexpansion set /A i=0 for %%X in (%*) do ( set /A i+=1 echo i=!i! echo %%X if !i!==1 ( set rootpath=%%~X ) else if !i!==2 ( set Manifest=%%~X ) else ( set /A idx=!i!-2 set Environments[!idx!]=%%X ) )
验证效果
当传入第3个参数为"server1,db1"时,i=3,计算得idx=1,此时创建的变量是Environments[1],执行echo E1=!Environments[1]!会得到预期输出:
E1="server1,db1"
内容的提问来源于stack exchange,提问作者Glen
相关产品推荐
相关产品推荐

