やりたいこと検索

こちらで指定したキーのみ入力を受け付ける

 

目次

 

「Y」か「N」の二択を受け付ける

こちらで指定したキーのみの入力を受け付けるには「choice」コマンドを使用します

まずは、もっとも簡単な「Y」もしくは「N」の二択をユーザーに選ばせる方法からです。それは、以下のバッチファイル(choice_YN.bat)のようになります。

これで、ユーザーから「Y」もしくは「N」の入力を待ちます。

以下、実行結果です。

こちらで指定したキーのみ入力を受け付ける 「Y」もしくは「N」の入力を受け付ける

「Y」もしくは「N」を入力すると、プログラムが進みます。「Enter」キーを押す必要はなく、入力と同時にプログラムが動きます。

それ以外のキーを入力すると「ピー」っというビープ音がなり、キーを入力することができません。つまり、「Y」もしくは「N」キーを押さないかぎりプログラムを先へ進ませることができません。

 

ユーザーがどっちを入力したかは、変数「errorlevel」を参照することで知ることができます。「Y」を入力したなら「errorlevel」には、「1」が、「N」を入力したなら「errorlevel」には2が入っています。

以下にそれを確認するためのバッチファイル(choice_YN_check.bat)を示します。

以下、実行例です。

こちらで指定したキーのみ入力を受け付ける 「Y」もしくは「N」の入力時の変数「errorlevel」のチェック

「Y」を入力したときには「1」、「N」を入力したときは「2」が変数「errorlevel」に格納されていることが分かります。

これを利用して、「Y」を入力したときと「N」を入力したときで、それぞれ違う処理を行うようなバッチファイルを作りましょう。それには、

を使用します。

変数「errorlevel」が[番号]で以下であれば、[番号に対応するラベル]に飛ぶコマンドです。「Y」か「N」かで、飛ぶラベルを変えてやり、それぞれの処理を書いていれば、ユーザーの入力によって行う処理を変化させることができます。「errorlevel」についての詳しい解説は「errorlevelの値から分岐処理を行う -やりたいことから検索-」をご覧下さい。

以下に、これを使用したバッチファイル例(choice_errorlevel.bat)を示します。

3行目の「choice」コマンドで「Y」か「N」の入力を要求します。

4,5行目でその入力に対して、それぞれの処理を書いたブロック(サブルーチン)に飛びます。「Y」入力の場合は「errorlevel」は「1」ですので、「:yes」ラベルに飛びます。「N」の場合も同様です。

ちなみに入力の際、大文字と小文字は区別しませんので、「y」や「n」の入力でも構いません。

「exit /b」はそこでブロック内の処理を終了し、メインプログラムへ戻るコマンドです。ラベルやブロック(サブルーチン)については、「バッチファイルでサブルーチンを使用する -やりたいこと検索-」に詳しく説明していますので参考にして下さい。

 

以下、実行結果です。

こちらで指定したキーのみ入力を受け付ける 変数「errorlevel」の値で異なる処理を実行する

ここで注意すべきことは、「if errorlevel」コマンドは「errorlevel」の値が大きい方から並べるということです。ですので、上記のバッチファイルは、以下のように並べました。

if errorlevel 2 goto :no
if errorlevel 1 goto :yes

これを、

if errorlevel 1 goto :yes
if errorlevel 2 goto :no

のように小さいほうから並べてしまうとうまくいきません。

以下、間違った並びのバッチファイル例(choice_errorlevel_fail.bat)と実行結果ですが、どちらを入力しても「Y」を入力したときの実行結果になってしまっています。

こちらで指定したキーのみ入力を受け付ける 「if errorlevel」コマンドの間違った使用順序

詳しくは「errorlevel(終了コードを取得する) -コマンド別解説-」を参照して下さい。

 

選択肢を自分で設定する

「Y」と「N」だけではなく他のキー入力を受け付けたいときは、「/c」オプションを使用します

[選択肢]には、入力を受け付けるキーを指定します。例えば、「1~3」までの入力を受け付けるときのバッチファイル「choice_c_123.bat」は以下の通りです。

以下実行結果です。

こちらで指定したキーのみ入力を受け付ける 「1~3」キーの入力を受け付ける

「errorlevel」には「1」を選択した場合は「1」が、「2」を選択した場合は「2」が、…というように左から「1」、「2」、…と値が入ります。

「choice /c 098」としたときも、「0」を選んだ場合は「errorlevel」は「1」、「0」を選んだ場合は「2」…です。

 

キーの選択肢には、文字も指定できます。

この場合は、「i」を選択した場合には「errorlevel」には「1」、「j」を選択した場合には「errorlevel」には「2」が、…となります。

 

入力に応じた処理ブロック(サブルーチン)を書く場合、これらのように選択肢が3つ以上ある場合でも前節と同様です。入力に応じた処理を記述したバッチファイル(if_c_subroutine.bat)を示します。

3行目でキー入力を求め、4~6行目でそれに応じた条件分岐をしていますが、ここでも「if errorlevel」コマンドは値が大きい方から並べることに注意して下さい。

以下、実行結果です。

こちらで指定したキーのみ入力を受け付ける 文字の入力から処理を分岐する

 

メッセージを表示する

選択肢の表示と同時に、ユーザーにメッセージを表示させたいときは、「/m」オプションを指定します

下記の例は、バッチファイル「if_c_subroutine.bat」にメッセージを加えたものです。

以下、実行結果です。

こちらで指定したキーのみ入力を受け付ける 選択肢と共にメッセージを付ける

 

選択肢を表示しない

「/n」オプションを指定すると選択肢を表示しません

バッチファイル「choice_n.bat」、

を実行した結果を示します。

こちらで指定したキーのみ入力を受け付ける 選択肢を表示しない

このように入力時は何も表示されないので、選択肢が分かりません。

このような場合は、「/m」オプションを使って選択肢が分かるようなメッセージを表示するのがよいでしょう。以下、「/n」オプションと「/m」オプションを併用したバッチファイルの例「choice_n_m.bat」です。

こちらで指定したキーのみ入力を受け付ける 「n」オプションと「m」オプションを併用する

 

選択に時間制限を与える

選択に時間制限を与えて一定時間入力がなかったら、あるキーを入力したとみなして進めることが可能です。

使用するオプションは「/t」と「/d」であり、これらは組み合わせて使われます。「/t」は制限時間を秒で指定します。制限時間を過ぎれば、「/d」で指定したキーを入力したとしてプログラムが進みます

 

例えば、ここまで散々使用してきた血液型のバッチファイルですが、以下のように書いたとします(choice_td.bat)。

「x」キーを追加して、そのキーに対する処理を追加しました。(※「O」、「A」、「B」キーに対する処理は省略しています。)

「/t」オプションで10秒を指定し、「/d」オプションで「x」キーを指定していますので、回答の時間制限10秒を過ぎると、「x」キーが押されたとしてプログラムが進みます。すると、「errorlevel」には「4」が入り、サブルーチン「unknow」の処理が実行されることになります。

以下、上記のバッチを実行後、10秒間入力しなかったときの実行結果です。

こちらで指定したキーのみ入力を受け付ける 入力に制限時間を設定する

10秒後、自動的に「X」が入力されてプログラムが先へ進みました。

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す