如何在批处理脚本中的FOR循环中寻址元素i + 1?

时间:2018-06-18 10:24:40

标签: batch-file for-loop

我在批处理文件中有一个数组,我想在每次迭代中获得i元素和i+1(在我的批serialNumberSection中调用),从第二个位置开始输入。到目前为止,我已经能够获得i元素,但我不能对i+1做同样的事情,我不明白为什么。

我做错了什么?

input array = [0x33333 0xAA 0x33323130 0xBB 0x37363534 0xCC
0x42413938 0xDD 0x46454443]

我的代码

set argCount=0
for %%x in (%*) do (
    set /A argCount+=1
    set "argVec[!argCount!]=%%~x"
)
echo Number of processed arguments: %argCount%

set serialNumberSection=2
for /L %%i in (2,2,%argCount%) do (
    echo %%i- "!argVec[%%i]!"
    set /A serialNumberSection+=1
    echo %%serialNumberSection !argVec[%%serialNumberSection]!
)

我的输出

Number of processed arguments: 9
2- "0xAA"
%serialNumberSection <=Expected: 0x33323130
4- "0xBB"
%serialNumberSection <=Expected: 0x37363534 
6- "0xCC"
%serialNumberSection <=Expected: 0x42413938 
8- "0xDD"
%serialNumberSection <=Expected: 0x46454443

1 个答案:

答案 0 :(得分:3)

而不是行:

echo %%serialNumberSection !argVec[%%serialNumberSection]!

使用:

call echo !serialNumberSection! %%argVec[!serialNumberSection!]%%

或:

for %%j in (!serialNumberSection!) do echo %%j !argVec[%%j]!

%%serialNumberSection语法错误,因为前缀%%仅对for变量引用有效(例如%%i),但serialNumberSection是正常的环境变量。

%serialNumberSection%不起作用,因为您正在更新循环内的变量。

!serialNumberSection!有效但不扩展数组元素,因为无法嵌套延迟扩展(因此!argVec[!serialNumberSection!]!尝试扩展变量argVec[]时失败,并且serialNumberSection被视为文字字符串),因此您需要解决这个问题。

也参考这篇文章: