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スクリプトを作成する際に役立つでしょう。ご活用あれ。