choice - ユーザーに選択させる
コマンドプロンプトやバッチファイルを使用している際、処理を分岐させるためユーザーからの入力を受け付けたい場面は多くあります。
ただ、自由に入力させてしまうと、意図しない入力によりエラーが発生してしまう可能性があります。
このページでは、ユーザーから指定したキーの入力を受け付けるchoiceコマンドについて、基本的な使い方と具体的なサンプルコードを紹介します。
choiceコマンドとは
choiceコマンドを使用すると、ユーザーに対して指定したキーの入力を促すメッセージを表示し、入力されたキーに応じて処理を分岐させることができます。
choiceコマンドの基本的な使い方は以下の通りです。
choice [/c [<選択キー1><選択キー2><…>]] [/n] [/cs] [/t <タイムアウト秒> /d <タイムアウト時の選択肢>] [/m <メッセージ>]
オプションを指定せず使用することもでき、その場合は以下のようになります。
choiceコマンドのオプション
choiceコマンドには、以下のオプションがあります。
| オプション | 説明 |
|---|---|
| /C:[キー] | ユーザーが選択可能なキーを指定します。デフォルトでは、ユーザーは Y (yes) または N (no) を選択できます。 |
| /N | プロンプト文字列の後に選択肢を表示しません。 |
| /S | 設定した選択肢を大文字小文字を区別するようにします。デフォルトでは大文字小文字は区別されません。 |
| /T:[秒数] | ユーザーがキーを押すまでの秒数を指定します。このオプションを指定しない場合、ユーザーがキーを押すまで無制限に待ちます。 |
| /D:[キー] | ユーザーがキーを押すまでの秒数が経過した場合に使用されるデフォルトのキーを指定します。/T オプションと一緒に使用する必要があります。 |
| /M:[メッセージ] | プロンプトに表示するメッセージを指定します。 |
choiceコマンドの具体的な使い方
ユーザーの選択に応じて処理を分岐する
choiceコマンドの最も基本的な使い方は、ユーザーの選択に応じて処理を分岐させることです。
以下のサンプルコードでは、ユーザーがYを入力した場合にYes、Nを入力した場合にNoと表示します。
@echo off
setlocal
choice /c YN /m "Yes or No?"
if %errorlevel% == 1 (
echo Yes
) else (
echo No
)
endlocal
上記のバッチファイルを実行すると、以下のように表示されます。
ユーザーがYを入力した場合は、以下のように表示されます。
任意のメッセージと選択肢を表示する
/cオプションと/mオプションを組み合わせることで、任意のメッセージと選択肢を表示することができます。
以下のサンプルコードでは、ユーザーに好きな果物を選択してもらい、選択された果物を表示します。
@echo off
setlocal
choice /c AB /m "好きな果物を選んでください。[A:りんご, B:バナナ]"
if %errorlevel% == 1 (
echo りんご
) else (
echo バナナ
)
endlocal
上記のバッチファイルを実行すると、以下のように表示されます。
タイムアウトを有効にする
/tオプションを指定することで、ユーザーがキーを押すまでの秒数を指定することができます。
以下のサンプルコードでは、Y/Nの選択肢を 5 秒間表示し、選択されなかった場合はNoと表示します。
@echo off
setlocal
choice /c YN /t 5 /d N /m "Yes or No?"
if %errorlevel% == 1 (
echo Yes
) else (
echo No
)
endlocal
上記のバッチファイルを実行すると、選択した場合は通常通り処理が実行されますが、5 秒間何も入力されなかった場合は、以下のように Noと表示されます。
練習問題
最後に確認テストに挑戦してみましょう。
テストはクライアント側で完結するため、サーバーにデータが送信されることはありません。