我试图以2的步长循环数组。我想要的是在一次迭代中取2个值然后处理它(即说i和i + 1索引需要在everyloop中处理)。因为我写了以下代码片段。
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 []
当我在echo模式中运行上述批处理时,我得到了以下
(
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]
我无法理解发生了什么?
答案 0 :(得分:2)
原帖
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]!]
)
答案 1 :(得分:0)
如果我理解你的问题(而且这很难说),这样的事情可以帮到你:
@echo off
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]