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

时间:2015-02-21 22:12:53

标签: arrays batch-file cmd

我试图以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]

我无法理解发生了什么?

2 个答案:

答案 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]