MENU

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

CATEGORY

大学 (138) 仕事 (14) 航空宇宙 (101) 写真 (71) 旅行 (31) 飯・酒 (17) コンピュータ (114) その他 (43)

TAG

ARCHIVE

RECENT

【写真】今年の写真活動振り返り 2022 【酒蔵】佐渡島の日本酒 酒蔵めぐり 【研究】博士論文 最終審査 無事通過! あけましておめでとうございます 博論と仕事以外なにもできん 【フィルムカメラ】FUJIFILM X-T5 による 1.6 億画素デュープによって,ようやく中判フィルムのデジタル化に満足できた

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

事象発生日:2018-01-17

記事公開日:2018-01-17

アクセス数:98726

高校時代に発見したバッチファイル (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 (※公開されることはありません)

コメント