高校時代に発見したバッチファイル (Batch File) で配列を扱う方法の覚書.
call
をコマンドの頭につけると,call
が呼ばれるたびに変数が展開されることを利用する.
Microsoft Windows 10 Home (64bit)
ソースコードと実行結果を見れば説明不要だろう.
ひどいと言えばひどい.
完全に想定されていないcall
の使い方をしている.
call
を1回評価するとそのたびに変数が展開されるので,多重変数展開が可能となる.
つまり,28行目などを見て分かる通り,配列のインデックスを配列にするなどの多層化もできてしまう.
自明だが,Arr[I][J]
のような多次元配列も実装可能.
@echo off set Arr[0]=hoge set Arr[1]=fuga set Arr[2]=piyo set Arr[3]=moge for /l %%I in (0,1,3) do ( echo I=%%I, Arr[I]=%%Arr[%%I]%% call echo I=%%I, Arr[I]=%%Arr[%%I]%% ) echo. set I=0 :LOOP echo I=%I%, Arr[I]=%%Arr[%I%]%% call echo I=%I%, Arr[I]=%%Arr[%I%]%% set /a I=%I% + 1 if "%I%"=="4" goto BREAK goto LOOP :BREAK echo. set Brr[1]=2 set I=1 echo %%%%Arr[%%Brr[%I%]%%]%%%% call echo %%%%Arr[%%Brr[%I%]%%]%%%% call call echo %%%%Arr[%%Brr[%I%]%%]%%%%
I=0, Arr[I]=%Arr[0]% I=0, Arr[I]=hoge I=1, Arr[I]=%Arr[1]% I=1, Arr[I]=fuga I=2, Arr[I]=%Arr[2]% I=2, Arr[I]=piyo I=3, Arr[I]=%Arr[3]% I=3, Arr[I]=moge I=0, Arr[I]=%Arr[0]% I=0, Arr[I]=hoge I=1, Arr[I]=%Arr[1]% I=1, Arr[I]=fuga I=2, Arr[I]=%Arr[2]% I=2, Arr[I]=piyo I=3, Arr[I]=%Arr[3]% I=3, Arr[I]=moge %%Arr[%Brr[1]%]%% %Arr[2]% piyo
foreach
の実装-実はforeach
もできてしまう.
@echo off set Arr[0]=hoge set Arr[1]=fuga set Arr[2]=piyo set Arr[3]=moge set I=0 :LOOP call set Flag=%%Arr[%I%]%% if defined Flag ( echo I=%I%, Arr[I]=%Flag% set /a I=%I% + 1 goto LOOP )
I=0, Arr[I]=hoge I=1, Arr[I]=fuga I=2, Arr[I]=piyo I=3, Arr[I]=moge
名前
Email (※公開されることはありません)
コメント