バッチファイルやPowerShellスクリプトでメニューを作成する方法

バッチファイルやPowerShellスクリプトでメニューを作成する方法

Windows環境でバッチファイルやPowerShellスクリプトを作成していると、最初にメニューを表示して、ユーザーの選択に応じた処理を行うようにしたいときがあります。

そこでここでは、バッチファイルやPowerShellスクリプトでメニューを作成して、ユーザーがメニューから選択した内容に応じた処理を実行する方法を解説します。

choiceコマンドを使った方法

バッチファイルを実行したときに、まずメニューを表示してユーザーの選択に応じた処理を行いたい場合、Windows 10以降なら、choiceコマンドを使った方法が一般的です。

choiceコマンドの基本的な使いかたは、以下のとおりです。

> choice /c 123 /m 実行する処理番号を入力してください。:

主なオプションは次のとおりです。

オプション説明
/Cユーザーが入力できる選択肢(半角英数字など)を指定できます。上のコマンドの場合では、1、2、3が選択肢となります。
/Mユーザーに表示するメッセージを指定します。
/N選択肢を表示したくない時に指定します。

なお、choiceコマンドでユーザーが入力できる値は1文字だけで、選択肢として指定したキーしか受け付けません。また、入力した値はerrorlevel変数に格納されます。たとえば、1番目の選択肢が選択されたら1、2番目の選択肢が選択されたら2が格納されます。

choiceコマンドでユーザーが入力した値に応じて処理を行う基本的なバッチファイルは、以下のような感じになります。

@echo off
echo -----------------
echo ■ メニュー ■
echo -----------------
echo 1:処理1
echo 2:処理2
echo 3:処理3
echo x:終了
echo -----------------
choice /c 123x /m 実行する処理番号を入力してください。: 

if %errorlevel%==1 (
  echo ここに処理1の内容を記述します。
)
if %errorlevel%==2 (
  echo ここに処理2の内容を記述します。
)
if %errorlevel%==3 (
  echo ここに処理3の内容を記述します。
)
if %errorlevel%==4 (
  goto :EOF
)

setコマンドを使った方法

Windows 10より前までは、バッチファイルでメニューを表示してユーザーの選択に応じた処理を行いたい場合、setコマンドを使った方法が一般的でした。この方法は現在でも有効です。

setコマンドでは以下のようにコマンドを実行して、ユーザーが入力した値を変数に格納します。

> set /p Input=実行する処理番号を入力してください。:

上のコマンドでは、ユーザーが入力した値が「Input」という変数に格納されるので、あとは変数Inputの値に応じた処理を記述します。

setコマンドでユーザーが入力した値に応じて処理を行う基本的なバッチファイルは、以下のような感じになります。

@echo off
echo -----------------
echo ■ Menu ■
echo -----------------
echo 1:処理1
echo 2:処理2
echo 3:処理3
echo x:終了
echo -----------------
set /p Input=実行する処理番号を入力してください。:

if %Input%==1 (
  echo ここに処理1の内容を記述します。
  goto :EOF
)
if %Input%==2 (
  echo ここに処理2の内容を記述します。
  goto :EOF
)
if %Input%==3 (
  echo ここに処理3の内容を記述します。
  goto :EOF
)
if %Input%==x (
  goto :EOF
)

echo 正しい番号を入力してください。
goto :menu

Read-Hostコマンドレットを使った方法

PowerShellスクリプトでメニューを表示してユーザーの選択に応じた処理を行いたい場合、Read-Hostコマンドレットを使ってユーザーが入力した値を変数に格納して、変数に格納された値に応じて処理を記述します。

PS> $Input = Read-Host "実行する処理番号を入力してください。:"

Read-Hostコマンドレットでユーザー入力した値に応じて処理を行う基本的なPowerShellスクリプトは、以下のような感じになります。

$menu = @"
-----------------
■ メニュー ■
-----------------
1:処理1
2:処理2
3:処理3
x:終了
-----------------
"@

$Flg=$True
while($Flg) {
 $menu
 $Input = Read-Host "実行する処理番号を入力してください。"

 switch($Input) {
  "1" { Write-Host "ここに処理1の内容を記述します。" ;$Flg=$False ;break }
  "2" { Write-Host "ここに処理2の内容を記述します。" ;$Flg=$False; break }
  "3" { Write-Host "ここに処理3の内容を記述します。" ;$Flg=$False; break }
  "x" { $Flg=$False; break }
  default {Write-Host "正しい番号を入力してください。" }
 }
}

あとがき

ここで紹介した方法を用いれば、Windowsでさまざまな処理を行うバッチファイルやPowerShellスクリプトを作成する際に役立つでしょう。ご活用あれ。