バッチファイルでswitch-case文のような処理をする2つの方法

バッチファイル

プログラミング言語におけるswitch-case文は、複数の選択肢から一つを選んで分岐する便利な構文です。バッチファイルでは直接switch-case文はサポートされていませんが、書き方を工夫すると、似たような処理を記述できます。

この記事では、バッチファイルにおけるswitch-case文的な処理の書き方を紹介します。

実現したい機能

ユーザになにかを選択してもらい、その選択に応じて処理を行うバッチファイルを実装します。

1: りんご, 2: ばなな, 3: ぶどう
好きな果物の番号を選んでください(1-3): 2
ばななが選ばれました。
続行するには何かキーを押してください . . .

サンプルコード1:ラベルを生成してgotoでジャンプ

gotoで指定するラベルは、バッチファイルの処理中に結合して生成することが可能です。以下は、ラベルを生成してgotoでジャンプする例です。

@echo off
setlocal

:input
echo 1: りんご, 2: ばなな, 3: ぶどう
set /p choice="好きな果物の番号を選んでください(1-3): "

rem 入力値の範囲チェック
if %choice% NEQ 1 if %choice% NEQ 2 if %choice% NEQ 3 goto default

rem 選択されたケースにジャンプ ★
goto case%choice%

:case1
echo りんごが選ばれました。
goto end

:case2
echo ばななが選ばれました。
goto end

:case3
echo ぶどうが選ばれました。
goto end

:default
echo 不正な入力です。:%choice%
goto input

:end
endlocal

pause

注意点としては、case%choice% で存在しないラベルが生成された場合に、バッチファイルが途中終了することです。このため、ラベル生成をする際には、入力値の範囲チェックが重要となります。

サンプルコード2:ifとgotoを使用

ifとgotoを使用することでも、switch-case文のような処理を実現できます。

@echo off
setlocal

:input
echo 1: りんご, 2: ばなな, 3: ぶどう
set /p choice="好きな果物の番号を選んでください(1-3): "

rem 選択をひとつずつ判定して指定ラベルにジャンプ ★
if "%choice%"=="1" goto case1
if "%choice%"=="2" goto case2
if "%choice%"=="3" goto case3
goto default

:case1
echo りんごが選ばれました。
goto end

:case2
echo ばななが選ばれました。
goto end

:case3
echo ぶどうが選ばれました。
goto end

:default
echo 不正な入力です。:%choice%
goto input

:end
endlocal

pause

この方法の方が、分岐の処理としては分かりやすいですが、たとえばcaseが10個になるなど、分岐先が多くなると、その分if文も同様に増加するので、やや見辛くなる欠点があります。

まとめ

この記事では、バッチファイルにおけるswitch-case文的な処理の書き方を2つ紹介しました。どちらにもメリット・デメリットが存在しますので、使用する場合に応じて使い分けていただくと良いと思います。

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