※この記事は「2023年7月24日」に更新しました。
コマンドプロンプト講座です。
それでは見ていきましょう。

指定したキーの入力を受け付けるには
コマンドプロンプトで指定したキーの入力を受け付けるには、choiceコマンドを使います。
choice
オプションも指定せずに実行すると、下記のような画面が表示されます。

Y もしくは N を入力すると、プログラムが先に進みます。
それ以外の入力は受け付けずに先へ進みません。
入力したキーによって、errorlevel という変数に値が代入されます。
Y を入力すると 1 が代入され、N を入力すると 2 が代入されます。

@echo off choice echo errorlevel=%errorlevel% pause
Y を入力したときの実行結果です。

続いて、N を入力したときの実行結果です。

入力キーを指定する
入力キーを指定するには、/cオプションを使います。
例えば、以下のようなコマンドの場合。
choice /c:abc

[A,B,C]?
勘の鋭い方ならもうわかるかと思いますが、A を選ぶと 1、B を選ぶと 2、C を選ぶと 3 が errorlevel に代入されます。
入力キーの候補を非表示にする
入力キーの候補を非表示にするには、/nオプションを使います。
choice /n
これで候補が非表示になります。
メッセージを表示させる
自作のメッセージを表示させるには、/mオプションを使います。
choice /m "自作メッセージ"
例えば、以下のようなコマンドを実行してみます。
choice /n /m "Y もしくは N を入力してください。"
結果は以下の通りです。

入力時間に制限を与える
入力時間に制限を与えるには、/tオプションを使います。
choice /t 時間 /d 文字
時間はタイムリミット(秒)を指定します。
文字はタイムリミットを過ぎたときに強制的に入力する文字を指定します。
例えば、以下のような場合。
choice /t 10 /d y

バッチファイルでクイズを作れます
この choiceコマンドを使えば、バッチファイルでクイズを作ることができます。
@echo off echo 初代ポケットモンスターが発売されたのはいつ? echo 1.1996年2月27日 echo 2.1998年9月12日 echo 3.1999年11月21日 choice /c:123 /t 30 /d 2 /n /m "解答:" if %errorlevel% equ 1 goto correct echo 不正解! pause exit :correct echo 正解! pause
制限時間30秒のクイズで正解は 1 です。

最後に
今回は、指定したキーの入力を受け付けるコマンドについて、解説しました。
前回は、ファイル名を一括で変更する方法について紹介しました。
非常に古典的ではありますが、頑張れば、ちょっとしたノベルゲームも制作できそうです(なかなかの苦行ではありますが)。
そういえば、昔、ゲームブックみたいなものがあって、小説風になっていて、選択肢によって何ページを開けるみたいなものがありました。
goto とラベルは多用すると、非常に見づらいソースコードになります。

こうやって書いていると最近のプログラミング言語のありがたみがわかるかと思います。