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

にメンテナンス済み

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

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

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

choiceコマンドとは

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

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

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

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

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

choiceコマンドのオプション

choiceコマンドには、以下のオプションがあります。

オプション説明
/C:[キー]ユーザーが選択可能なキーを指定します。デフォルトでは、ユーザーは Y (yes) または N (no) を選択できます。
/Nプロンプト文字列の後に選択肢を表示しません。
/S設定した選択肢を大文字小文字を区別するようにします。デフォルトでは大文字小文字は区別されません。
/T:[秒数]ユーザーがキーを押すまでの秒数を指定します。このオプションを指定しない場合、ユーザーがキーを押すまで無制限に待ちます。
/D:[キー]ユーザーがキーを押すまでの秒数が経過した場合に使用されるデフォルトのキーを指定します。/T オプションと一緒に使用する必要があります。
/M:[メッセージ]プロンプトに表示するメッセージを指定します。

choiceコマンドの具体的な使い方

ユーザーの選択に応じて処理を分岐する

choiceコマンドの最も基本的な使い方は、ユーザーの選択に応じて処理を分岐させることです。

以下のサンプルコードでは、ユーザーがYを入力した場合にYesNを入力した場合に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) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>
Yes or No?[Y,N]?

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

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

任意のメッセージと選択肢を表示する

/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) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>
好きな果物を選んでください。[A:りんご, B:バナナ]? [A,B]? A
りんご
C:\users\user>

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

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

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 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コマンドのデフォルトのプロンプトメッセージは何ですか?

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