MENU

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

CATEGORY

大学 (140) 仕事 (17) 航空宇宙 (104) 写真 (77) 旅行 (32) 飯・酒 (17) コンピュータ (118) その他 (44)

TAG

ARCHIVE

RECENT

【カメラ】X100 シリーズが好きすぎる(主にリーフシャッタ) 【カメラ】X100V から X100VI に買い替えました 【自宅サーバー】Google Domains から Cloudflare にドメインを移管 【カメラ】FUJIFILM XF レンズのサイズ比較ができるようにしてみた 【写真】自作写真閲覧ページにてフィルムシミュレーションで写真をフィルタできるようにした

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

事象発生日:2018-01-17

記事公開日:2018-01-17

アクセス数:107889

高校時代に発見したバッチファイル (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
実行結果

関連記事

コメントを投稿

名前

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

コメント