在 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]
我正在尝试按步长 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]