我在批处理文件中有一个数组,我想在每次迭代中获得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
答案 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
被视为文字字符串),因此您需要解决这个问题。
也参考这篇文章: