[コマンドプロンプト] choiceコマンドの使い方 – ユーザーに選択させる

choiceコマンドは、コマンドプロンプトでユーザーに選択肢を提示し、その選択に応じて異なる処理を実行するために使用されます。

基本的な構文はchoice /C [選択肢] /M [メッセージ]です。

/Cオプションで選択肢を指定し、/Mオプションで表示するメッセージを設定します。

ユーザーが選択肢を入力すると、%ERRORLEVEL%に選択された番号が格納されます。

例えば、choice /C YN /M "続行しますか?"とすると、YまたはNを選択肢として提示します。

この記事でわかること
  • choiceコマンドの基本的な使い方
  • 選択肢の指定方法とオプション
  • 実践的なバッチファイルの例
  • タイムアウトやデフォルト設定の活用
  • エラーハンドリングの手法

目次から探す

choiceコマンドとは

choiceコマンドは、Windowsのコマンドプロンプトで使用されるコマンドの一つで、ユーザーに選択肢を提示し、その選択に基づいて処理を分岐させることができます。

このコマンドを使用することで、バッチファイルやスクリプト内でインタラクティブな操作を実現することが可能です。

例えば、ユーザーに「はい」または「いいえ」といった選択肢を与え、その結果に応じて異なる処理を行うことができます。

choiceコマンドは、選択肢の数や内容を自由に設定できるため、メニュー形式のインターフェースを作成する際にも非常に便利です。

また、タイムアウト機能やデフォルト選択肢の設定も可能で、ユーザーの操作をスムーズに進めることができます。

choiceコマンドの基本構文

choiceコマンドの基本構文は以下の通りです。

choice [/C:選択肢] [/M:"メッセージ"] [/N] [/T:秒数] [/D:デフォルト]

この構文を使って、さまざまなオプションを指定することができます。

以下に各オプションの詳細を説明します。

/Cオプションで選択肢を指定する

/Cオプションを使用すると、ユーザーに提示する選択肢を指定できます。

選択肢は1文字で表現され、複数の選択肢をカンマで区切って指定することも可能です。

choice /C:YN

この例では、 YN の2つの選択肢が表示されます。

/Mオプションでメッセージを表示する

/Mオプションを使うと、ユーザーに表示するメッセージを指定できます。

これにより、選択肢の意味を明確に伝えることができます。

choice /C:YN /M:"はいまたはいいえを選択してください。"

この例では、メッセージが表示された後に選択肢が提示されます。

/Nオプションでメッセージを非表示にする

/Nオプションを指定すると、選択肢の前にメッセージを表示しないように設定できます。

これにより、選択肢のみを表示することができます。

choice /C:YN /N

この例では、選択肢 YN だけが表示され、メッセージは表示されません。

/Dオプションでデフォルトの選択肢を設定する

/Dオプションを使うことで、タイムアウト時に自動的に選択されるデフォルトの選択肢を指定できます。

これにより、ユーザーが選択を行わなかった場合でも、スクリプトがスムーズに進行します。

choice /C:YN /D:Y

この例では、タイムアウト時に Y が自動的に選択されます。

/Tオプションでタイムアウトを設定する

/Tオプションを使用すると、ユーザーが選択を行うまでのタイムアウト時間を設定できます。

指定した時間内に選択が行われない場合、デフォルトの選択肢が自動的に選ばれます。

choice /C:YN /D:Y /T:10

この例では、10秒のタイムアウトが設定されます。

デフォルト選択肢の設定が必須なため、必ず/Dによる指定が必要です。注意しましょう。

choiceコマンドの実行結果

choiceコマンドを実行すると、ユーザーが選択した結果に基づいて、特定の値が環境変数%ERRORLEVEL%に格納されます。

この値を利用することで、選択肢に応じた処理を行うことができます。

以下に、具体的な内容を説明します。

%ERRORLEVEL%の役割

%ERRORLEVEL%は、直前に実行したコマンドの終了コードを示す環境変数です。

choiceコマンドの場合、選択肢に応じて異なる数値が設定されます。

例えば、最初の選択肢が 1 、次が 2 といった具合に、選択肢の順番に応じた数値が割り当てられます。

  • 1番目の選択肢を選んだ場合:%ERRORLEVEL%は1
  • 2番目の選択肢を選んだ場合:%ERRORLEVEL%は2

選択肢に応じた処理の分岐

%ERRORLEVEL%の値を使って、選択肢に応じた処理を分岐させることができます。

if文を使用して、選択された値に基づいて異なるコマンドを実行することが可能です。

choice /C:YN /M:"続行しますか? (Y/N)"
if %ERRORLEVEL%==1 (
    echo "続行します。"
) else (
    echo "終了します。"
)

この例では、 Y を選んだ場合は「続行します。」と表示され、 N を選んだ場合は「終了します。」と表示されます。

複数の選択肢を処理する方法

複数の選択肢を処理する場合も、%ERRORLEVEL%を利用して分岐処理を行います。

選択肢の数が増えると、if文を連続して使用することが一般的です。

choice /C:ABC /M:"A, B, Cのいずれかを選択してください。"
if %ERRORLEVEL%==1 (
    echo "Aが選ばれました。"
) else if %ERRORLEVEL%==2 (
    echo "Bが選ばれました。"
) else if %ERRORLEVEL%==3 (
    echo "Cが選ばれました。"
)

この例では、選択肢 ABC に応じて、それぞれ異なるメッセージが表示されます。

選択肢の数が多い場合でも、同様の方法で処理を分岐させることができます。

choiceコマンドの実践例

choiceコマンドを使った具体的な実践例をいくつか紹介します。

これらの例を参考にすることで、実際のスクリプトに応用することができます。

Yes/Noの選択肢を作成する

ユーザーに「はい」または「いいえ」を選ばせるシンプルな例です。

選択肢に応じて異なるメッセージを表示します。

choice /C:YN /M:"続行しますか? (Y/N)"
if %ERRORLEVEL%==1 (
    echo "続行します。"
) else (
    echo "終了します。"
)

このスクリプトを実行すると、ユーザーが Y を選んだ場合は「続行します。」と表示され、 N を選んだ場合は「終了します。」と表示されます。

複数の選択肢から選ばせる

3つの選択肢 ABC を提示し、それぞれに応じた処理を行う例です。

choice /C:ABC /M:"A, B, Cのいずれかを選択してください。"
if %ERRORLEVEL%==1 (
    echo "Aが選ばれました。"
) else if %ERRORLEVEL%==2 (
    echo "Bが選ばれました。"
) else if %ERRORLEVEL%==3 (
    echo "Cが選ばれました。"
)

このスクリプトを実行すると、ユーザーが選んだ選択肢に応じて異なるメッセージが表示されます。

タイムアウト付きの選択肢を作成する

ユーザーが選択を行うまでのタイムアウトを設定した例です。

指定した時間内に選択が行われない場合、デフォルトの選択肢が選ばれます。

choice /C:YN /T:10 /D:Y /M:"続行しますか? (Y/N) [10秒後にYが選択されます]"
if %ERRORLEVEL%==1 (
    echo "続行します。"
) else (
    echo "終了します。"
)

このスクリプトでは、10秒のタイムアウトが設定されており、ユーザーが何も選択しなかった場合は Y が自動的に選ばれます。

デフォルトの選択肢を設定する

デフォルトの選択肢を設定することで、タイムアウト時に自動的に選択される選択肢を指定する例です。

choice /C:YN /D:N /M:"続行しますか? (Y/N) [デフォルトはN]"
if %ERRORLEVEL%==1 (
    echo "続行します。"
) else (
    echo "終了します。"
)

このスクリプトでは、デフォルトの選択肢が N に設定されているため、ユーザーが何も選択しなかった場合は「終了します。」と表示されます。

choiceコマンドの応用例

choiceコマンドは、さまざまなシナリオで活用できる柔軟なコマンドです。

以下に、具体的な応用例をいくつか紹介します。

バッチファイルでの選択肢処理

バッチファイル内でchoiceコマンドを使用して、ユーザーの選択に基づいて異なる処理を実行する例です。

@echo off
echo バッチファイルの処理を開始します。
choice /C:YN /M:"続行しますか? (Y/N)"
if %ERRORLEVEL%==1 (
    echo "処理を続行します。"
    rem ここに続行する処理を記述
) else (
    echo "処理を終了します。"
    exit /B
)

このスクリプトでは、ユーザーが Y を選んだ場合に続行処理が実行され、 N を選んだ場合はバッチファイルが終了します。

複数の選択肢を使ったメニュー作成

複数の選択肢を使って、メニュー形式のインターフェースを作成する例です。

ユーザーが選択したオプションに応じて異なる処理を実行します。

@echo off
:menu
echo メニュー:
echo 1. オプションA
echo 2. オプションB
echo 3. 終了
choice /C:123 /M:"選択してください。"
if %ERRORLEVEL%==1 (
    echo "オプションAが選ばれました。"
    rem オプションAの処理を記述
) else if %ERRORLEVEL%==2 (
    echo "オプションBが選ばれました。"
    rem オプションBの処理を記述
) else (
    echo "終了します。"
    exit /B
)
goto menu

このスクリプトでは、メニューが表示され、ユーザーが選択するたびにその選択に応じた処理が実行されます。

選択肢を選ぶと再度メニューが表示されます。

繰り返し処理での選択肢の活用

選択肢を繰り返し表示し、ユーザーが選択するたびに処理を行う例です。

これにより、ユーザーが何度でも選択できるようになります。

@echo off
:loop
choice /C:YN /M:"もう一度続行しますか? (Y/N)"
if %ERRORLEVEL%==1 (
    echo "続行します。"
    rem 続行する処理を記述
) else (
    echo "終了します。"
    exit /B
)
goto loop

このスクリプトでは、ユーザーが Y を選ぶ限り、処理が繰り返されます。

N を選ぶと終了します。

エラーハンドリングと選択肢の組み合わせ

選択肢を使ってエラーハンドリングを行う例です。

ユーザーが選択肢を選ぶことで、エラー処理を行うことができます。

@echo off
echo 処理を開始します。
choice /C:RY /M:"エラーが発生しました。再試行しますか? (R:再試行, Y:終了)"
if %ERRORLEVEL%==1 (
    echo "再試行します。"
    rem 再試行する処理を記述
) else (
    echo "終了します。"
    exit /B
)

このスクリプトでは、エラーが発生した場合に再試行するか終了するかをユーザーに選ばせます。

選択肢に応じて適切な処理が実行されます。

よくある質問

choiceコマンドで選択肢を増やすには?

choiceコマンドで選択肢を増やすには、/Cオプションを使用して、選択肢をカンマで区切って指定します。

例えば、4つの選択肢 ABCD を作成する場合は、以下のように記述します。

choice /C:ABCD /M:"A, B, C, Dのいずれかを選択してください。"

このようにすることで、ユーザーは指定したすべての選択肢から選ぶことができます。

タイムアウト後に自動的に選択させるには?

タイムアウト後に自動的に選択させるには、/Tオプションを使用してタイムアウト時間を設定し、/Dオプションでデフォルトの選択肢を指定します。

例えば、10秒後に Y を自動的に選択させる場合は、以下のように記述します。

choice /C:YN /T:10 /D:Y /M:"続行しますか? (Y/N) [10秒後にYが選択されます]"

この設定により、ユーザーが何も選択しなかった場合、10秒後に Y が自動的に選ばれます。

%ERRORLEVEL%が正しく取得できない場合の対処法は?

%ERRORLEVEL%が正しく取得できない場合、以下の点を確認してください。

  1. コマンドの実行順序: choiceコマンドの直後に%ERRORLEVEL%を参照する必要があります。

間に他のコマンドを挟むと、値が変わる可能性があります。

  1. 条件文の記述: if文の条件式が正しく記述されているか確認してください。

例えば、if %ERRORLEVEL%==1のように、正確に比較する必要があります。

  1. バッチファイルの実行環境: バッチファイルを実行する環境によっては、choiceコマンドが正しく動作しない場合があります。

コマンドプロンプトで直接実行してみて、動作を確認してください。

これらの点を確認することで、%ERRORLEVEL%が正しく取得できるようになるはずです。

まとめ

この記事では、Windowsのコマンドプロンプトにおけるchoiceコマンドの基本的な使い方から、実践的な応用例まで幅広く解説しました。

特に、選択肢の設定やメッセージの表示、タイムアウト機能など、さまざまなオプションを活用することで、ユーザーインターフェースをよりインタラクティブにする方法を紹介しました。

これを機に、実際のバッチファイルやスクリプトにchoiceコマンドを取り入れて、より便利で使いやすいツールを作成してみてはいかがでしょうか。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • コマンドプロンプト (92)
  • Bash (127)
  • URLをコピーしました!
目次から探す