在 for 循环中对数组进行索引 [错误输出] [批处理]

indexing in array in for loop [wrong output] [batch]

我正在尝试按步长 2 遍历数组。我想要的是在一次迭代中取 2 个值然后处理它(即说 i 和 i+1 索引需要在每个循环中处理)。为此,我写了以下片段。

for /l %%a  in (1,2,!counter!) do (
    set username=!array[%%a]!
    set /a nextindex=%%a+1
    echo username:!username! index: !nextindex! value [!array[%nextindex%]!]
)

当我 运行 这段代码时,我得到的输出是:

username:FT_SelfAdmin01 index: 2 value []
username:FT_SelfAdmin01 index: 4 value []
username:FT_SelfAdmin01 index: 6 value []

当我 运行 上述批次处于回显模式时,我得到以下

(
set username=!array[1]!  
 set /a nextindex=1+1  
 echo username:!username! index: !nextindex! value [!array[nextindex]!] 
)

当我更改此行时

echo username:!username! index: !nextindex! value [!array[%nextindex%]!]

到这一行
echo username:!username! index: !nextindex! value [!array[!nextindex!]!]

我明白了(作为代码的回显)

echo username:!username! index: !nextindex! value [!array[!nextindex!]!]

输出变为(我在这里只给出一行)

username:FT_SelfAdmin01 index: 4 value [nextindex]

我无法理解发生了什么?

原文

echo username:!username! index: !nextindex! value [!array[%nextindex%]!]

这将不起作用,因为 %nextindex% 变量引用未使用延迟扩展,已在解析完整 for %%a 块时被替换。

换行,现在延迟扩展

echo username:!username! index: !nextindex! value [!array[!nextindex!]!]
              ^........^        ^.........^        ^......^         ^.^

解析器看到的变量不是你想的那样。不能在延迟扩展内部使用延迟扩展。

如何解决? for 可替换参数

for %%b in (!nextindex!) do (
    echo username:!username! index: !nextindex! value [!array[%%b]!]
)

如果我对你的问题理解正确(这有点难说),那么这样的事情应该对你有所帮助:

@回声关闭

rem Just init the array
setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D E F) do (
  set array[!n!]=%%a
  set /A n+=1
)

for /L %%c  in (0,2,5) do (
   set username=!array[%%c]!
   set /a nextindex=%%c+1
   call set val=%%array[!nextindex!]%%
   echo username:!username! index: !nextindex! value [!val!]
)

这个输出是:

username:A index: 1 value [B]
username:C index: 3 value [D]
username:E index: 5 value [F]