我正在使用以下代码,如果我调用array.bat外部循环,则输出中的值可以是不同的,随着我在调用期间使用的索引而变化。
@echo off
set empresas[0]=EPB
set empresas[1]=ENF
set empresas[2]=ESE
set empresas[3]=ESS
set empresas[4]=EBO
set empresas[5]=EMG
set empresas[6]=EMT
set empresas[7]=ETO
call array.bat len empresas length
call array.bat getitem empresas 0 empresa1
echo %empresa1%
call array.bat getitem empresas 1 empresa1
echo %empresa1%
echo %length%
for /l %%x in (0, 1, %length% ) do (
call array.bat getitem empresas %x% empresa3
echo %empresa3%
echo %%x
)
该代码生成输出:
EPB
ENF
7
ETO
0
ETO
1
ETO
2
ETO
3
ETO
4
ETO
5
ETO
6
ETO
7
仅打印最后一个值。
答案 0 :(得分:0)
delayedexpansion
陷阱。请在SO上搜索delayed expansion
。
尝试
call array.bat getitem empresas %%x empresa3
CALL echo %%empresa3%%
请注意,%%x
是元变量%%x
的值。 %x%
是环境变量x
的内容(根据您的代码,未定义)
阅读delayedexpansion
将解释为什么需要额外的CALL
和%
加倍(许多可能的解决方案之一)