MENU

溶けかけてるうさぎ HP BLOG TOP RECENT ARTICLES POPULAR ARTICLES ABOUT THIS BLOG

CATEGORY

大学 (85) 航空宇宙 (55) 写真 (25) 旅行 (14) 飯・酒 (11) コンピュータ (88) その他 (13)

TAG

ARCHIVE

2018 (92) 2017 (80) 2016 (0)

RECENT

【駅メモ】4年目に突入して,ようやく3000駅突破 【WebRTC】Raspberry Pi搭載ロボットをWebRTCで遠隔操作しようとして失敗した 【航空宇宙】航空宇宙アドベントカレンダー 始まります! 【Perl】YAPC::Tokyo 2019 のチケットを確保しました! 【カメラ】Canonから富士フイルムに乗り換えました

【bat】バッチファイルで配列を扱う

2018-01-17

高校時代に発見したバッチファイル (Batch File) で配列を扱う方法の覚書.

callをコマンドの頭につけると,callが呼ばれるたびに変数が展開されることを利用する.

1.動作環境

Microsoft Windows 10 Home (64bit)

2.例1 -多重変数展開-

ソースコードと実行結果を見れば説明不要だろう.

 

ひどいと言えばひどい.

完全に想定されていない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
実行結果

3.例2 -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
実行結果

4.関連記事

コメントを投稿

名前

Email (※公開されることはありません)

コメント