MENU

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

CATEGORY

大学 (91) 航空宇宙 (59) 写真 (33) 旅行 (16) 飯・酒 (11) コンピュータ (94) その他 (20)

TAG

ARCHIVE

RECENT

【写真】都市夜景撮影 英会話をまた習い始めました 【Perl】YAPC::Tokyo 2019 にスタッフとして参加してきました むちゃくちゃな就活をして,内定がでたので,博士進学が決まった 【写真】望遠レンズで白黒(ACROS)撮影@銀座

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

コメント