为什么输出变量的值不会在循环内发生变化--Windows Batch

时间:2017-11-15 17:44:23

标签: windows batch-file

我正在使用以下代码,如果我调用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

仅打印最后一个值。

1 个答案:

答案 0 :(得分:0)

再次

delayedexpansion陷阱。请在SO上搜索delayed expansion

尝试

call array.bat getitem empresas %%x empresa3

CALL echo %%empresa3%%

请注意,%%x是元变量%%x的值。 %x%环境变量x内容(根据您的代码,未定义)

阅读delayedexpansion将解释为什么需要额外的CALL%加倍(许多可能的解决方案之一)