choice - ユーザーに選択させる
コマンドプロンプトやバッチファイルで、処理を分岐させるためにユーザーからの入力を受け付けたい場面は多くあります。
ただ、自由に入力させてしまうと、意図しない入力によりエラーが発生してしまう可能性があります。
このページでは、ユーザーから指定したキーの入力だけを受け付けるchoiceコマンドについて、基本的な使い方と具体的なサンプルコードを紹介します。
choiceコマンドとは
choiceコマンドを使用すると、ユーザーに対して指定したキーの入力を促すメッセージを表示し、入力されたキーに応じて処理を分岐させることができます。
choiceコマンドの基本的な使い方は以下の通りです。
choice [/c <選択キー>] [/n] [/cs] [/t <タイムアウト秒> /d <タイムアウト時の選択肢>] [/m <メッセージ>]
オプションを指定せず使用することもでき、その場合は以下のようになります。
入力されたキーは、環境変数%errorlevel%に「選択肢の何番目か」という数値で格納されます。詳しくは後述します。
choiceコマンドのオプション
choiceコマンドには、以下のオプションがあります。
| オプション | 説明 |
|---|---|
/c <キー> | ユーザーが選択可能なキーを指定します。デフォルトは YN(Y: はい、N: いいえ)です。 |
/n | プロンプト文字列の後に選択肢([Y,N]?)を表示しません。 |
/cs | 選択キーの大文字と小文字を区別します。デフォルトでは区別されません。 |
/t <秒数> | 何も入力されない場合に、デフォルトの選択肢を自動的に選ぶまでの秒数(0〜9999)を指定します。/dと一緒に使用する必要があります。 |
/d <キー> | タイムアウト時に選択されるキーを指定します。/cで指定したキーのいずれかで、/tと一緒に使用する必要があります。 |
/m <文字列> | プロンプトに表示するメッセージを指定します。 |
/tを指定しない場合は、ユーザーがキーを押すまで無期限に待ちます。
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
上記のバッチファイルを実行すると、以下のように表示されます。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
ユーザーがYを入力した場合は、以下のように表示されます。
選択結果は%errorlevel%で受け取る
choiceコマンドは、ユーザーが選んだキーそのものではなく、/cで指定したキーの**先頭から数えた順番(1 始まり)**を%errorlevel%に格納します。
例えば/c YNの場合、Yを選ぶと1、Nを選ぶと2になります。/c ABCであれば、Aは1、Bは2、Cは3です。
また、Ctrl + C で中断された場合は0になります。
選択肢が 3 つ以上ある場合は、gotoと組み合わせると分かりやすく分岐できます。
@echo off
setlocal
choice /c ABC /m "実行する処理を選んでください。[A:コピー, B:移動, C:キャンセル]"
if %errorlevel% == 1 goto copy
if %errorlevel% == 2 goto move
goto end
:copy
echo コピーを実行します。
goto end
:move
echo 移動を実行します。
:end
endlocal
%errorlevel%の値は、他のコマンドを実行すると上書きされます。choiceの直後に判定するか、変数に退避してから使用してください。
任意のメッセージと選択肢を表示する
/cオプションと/mオプションを組み合わせることで、任意のメッセージと選択肢を表示することができます。
以下のサンプルコードでは、ユーザーに好きな果物を選択してもらい、選択された果物を表示します。
@echo off
setlocal
choice /c AB /m "好きな果物を選んでください。[A:りんご, B:バナナ]"
if %errorlevel% == 1 (
echo りんご
) else (
echo バナナ
)
endlocal
上記のバッチファイルを実行すると、以下のように表示されます。
タイムアウトを有効にする
/tオプションと/dオプションを組み合わせると、一定時間入力がない場合に、デフォルトの選択肢を自動的に選択させることができます。
以下のサンプルコードでは、Y/Nの選択肢を 5 秒間表示し、選択されなかった場合はNが選択されて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と表示されます。
練習問題
最後に確認テストに挑戦してみましょう。
テストはクライアント側で完結するため、サーバーにデータが送信されることはありません。