2017-11-15 5 views
1

私は次のコードを使用しています。ループの外側でarray.batを呼び出すと、出力の値が異なる私は通話中に使用しました。出力変数の値がループ内で変化しないのはなぜですか?Windowsバッチ

@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 

のみTHA最後の値がprinttedされています。

+2

[Windowsバッチ変数は設定されません]の可能な複製(https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) – SomethingDark

+0

これは同じ質問ではありません。値はループ内でのみ変化しません。 –

+1

正確に同じ質問です。コードブロックの内部で設定された変数は、遅延拡張が有効になっていない限り、コードブロックの最後まで更新されません。 – SomethingDark

答えて

0

delayedexpansion再びトラップ。 SOのdelayed expansionを検索してください。

%%xは、メタ変数%%xの値であることを

call array.bat getitem empresas %%x empresa3 

CALL echo %%empresa3%% 

注意してみてください。 %x%は多くの可能な解決策の一つ(余分CALL%の倍増が必要な理由を説明しますdelayedexpansionについて読ん

(あなたのコードによると、未定義である、)環境変数x内容です)

関連する問題