choice - ユーザーに選択させる

にメンテナンス済み

コマンドプロンプトやバッチファイルで、処理を分岐させるためにユーザーからの入力を受け付けたい場面は多くあります。

ただ、自由に入力させてしまうと、意図しない入力によりエラーが発生してしまう可能性があります。

このページでは、ユーザーから指定したキーの入力だけを受け付けるchoiceコマンドについて、基本的な使い方と具体的なサンプルコードを紹介します。

choiceコマンドとは

choiceコマンドを使用すると、ユーザーに対して指定したキーの入力を促すメッセージを表示し、入力されたキーに応じて処理を分岐させることができます。

choiceコマンドの基本的な使い方は以下の通りです。

choice [/c <選択キー>] [/n] [/cs] [/t <タイムアウト秒> /d <タイムアウト時の選択肢>] [/m <メッセージ>]

オプションを指定せず使用することもでき、その場合は以下のようになります。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>choice
[Y,N]?

入力されたキーは、環境変数%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

上記のバッチファイルを実行すると、以下のように表示されます。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>
Yes or No?[Y,N]?
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

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

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

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

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

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

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

ユーザーがYを入力した場合は、以下のように表示されます。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>
Yes or No?[Y,N]? Y
Yes
C:\users\user>

選択結果は%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

上記のバッチファイルを実行すると、以下のように表示されます。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>
好きな果物を選んでください。[A:りんご, B:バナナ]? [A,B]? A
りんご
C:\users\user>

タイムアウトを有効にする

/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と表示されます。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>
Yes or No?[Y,N]? N
No
C:\users\user>

練習問題

最後に確認テストに挑戦してみましょう。

テストはクライアント側で完結するため、サーバーにデータが送信されることはありません。

問題1

コマンドプロンプトのchoiceコマンドは何のために使用されますか?

回答がサーバーに送信されることはありません
問題2

choiceコマンドでユーザーからの入力を受け取った後、その結果はどのように取得しますか?

回答がサーバーに送信されることはありません
問題3

choiceコマンドのデフォルトのプロンプトメッセージは何ですか?

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #コマンドライン #コマンド #ユーザーインプット