【Windowsバッチファイル(.bat)】配列の要素数を取得する


この記事はプロモーションを含みます。

Windows

ホーム > コマンドプロンプト・バッチファイル リファレンス

Windowsのバッチで、配列の要素数を取得する方法を解説します。

はじめに

先日、Windowsのバッチファイルで疑似的に配列を作成する方法を解説しました。
ここでは、作成した配列の要素数を取得する方法を説明します。

要素数を取得する

ここで説明する配列の要素数を取得するコードですが、少し長いので別の部品(バッチ)として切り出しました。
なので、ここでは呼び出し側と呼び出される側の両方のコードについて説明します。

呼び出し側(配列を作成)

ここでは、呼び出し側のバッチについて説明します。
呼び出し側では、配列の作成を行います。
また、取得した要素数が正しいかの確認も行っています。

@echo off

set array[0]=メロン
set array[1]=りんご
set array[2]=ぶどう

call GetArrayLength array
echo 【要素数】%errorlevel%

pause

呼び出される側(配列の要素数を取得)

ここでは、呼び出される側のバッチについて説明します。
呼び出される側では、引数として渡された配列の要素数を返す処理を記述しています。

本バッチファイル名は「GetArrayLength.bat」としています。
*バッチファイル名を変更する場合は呼び出し側も修正する必要があります。

このバッチで取得出来る配列の形式は「配列名[添え字]」です。
他の形式で配列を作る場合は、このバッチも少し修正が必要になります。

処理についてですが、配列を元にループを行い、要素数を格納した変数をインクリメントします。
配列から取り出した値が空の場合にループを抜けることで、要素数を取得しています。

@echo off

set length=0
set array_name=%~1

:loop
for /f "usebackq" %%i in (`call echo %%%array_name%[%length%]%%`) do set str=%%i
set str=%str:~0,1%%str:~-1%

if not "%str%"=="%%%%" (
	set /a length=%length%+1
	goto :loop
)

exit /b %length%

実行結果

前項で作成したバッチの実行結果です。

【要素数】3
続行するには何かキーを押してください . . .

バッチ使用時の注意

本バッチ使用時の注意事項です。

配列の要素に値が設定されていない場合は、正しく要素数が取得できません。

配列の要素に値が設定されていない場合とは、以下の4行目のような状態です。

@echo off

set array[0]=メロン
set array[1]=
set array[2]=ぶどう

call GetArrayLength array
echo 【要素数】%errorlevel%

pause

上記を実行すると、以下のように、値があるところまでしかカウントされません。

【要素数】1
続行するには何かキーを押してください . . .

下記のようにブランク値が設定されていれば、正しく要素数を取得することができます。

@echo off

set array[0]=メロン
set array[1]=""
set array[2]=ぶどう

call GetArrayLength array
echo 【要素数】%errorlevel%

pause
【要素数】3
続行するには何かキーを押してください . . .

関連記事

コメント

タイトルとURLをコピーしました