MENU

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

CATEGORY

大学 (116) 航空宇宙 (82) 写真 (56) 旅行 (28) 飯・酒 (14) コンピュータ (108) その他 (31)

TAG

ARCHIVE

RECENT

【Git】研究室メンバに向けた Git / GitLab の説明資料 【デバイス】世界最小スマホ Rakuten Miniを買って,楽天モバイルの無料回線を取得した 【写真】X100Vで残す写真日記(4月8日~4月18日) 【カメラ】修論祝にFUJIFILM X100Vを買った 【自宅サーバー】新サーバーの構築(ソフトウェア編)

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

事象発生日:2018-01-17

記事公開日: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 (※公開されることはありません)

コメント