Programming Field

Choice - DOS コマンド一覧

スポンサーリンク

2つ、あるいは複数の選択肢を表示します。選択肢を選ぶには、対応したキーを押します。

[Windows NT 系/XP] このコマンドは存在しません。ただし、ツールキットをインストールして入手したり、古いDOSから持ち込んで実行することは可能です。

[Windows Vista 以降] 「choice.exe」プログラムが存在し、同じような機能を提供しますが、若干構文が異なります。

構文

[MS-DOS, Windows 95/98/Me]

choice[.com] [/C[:]<choices>] [/N] [/S] [/T[:]c,nn] [<message>]

[Windows Vista 以降]

choice[.exe] [/C <choices>] [/N] [/CS] [/T nnnn [/D c]] [/M <message>]
/C[:]<choices>
選択肢となる文字を指定します ([MS-DOS, Windows 95/98/Me] 「:」はあっても無くても構いません / [Windows Vista 以降] 「:」ではなくスペースを置く必要があります)。たとえば、「Y」と「N」を選択させたい場合は「/C:YN」([Windows Vista 以降] 「/C YN」、以下同様)、「Y」と「N」と「C」を選択させたい場合は「/C:YNC」と指定します。
省略した場合、「/C:YN」となります。
/N
選択肢と「?」を表示させません。指定しなかった場合、<message> に続けて「[Y,N]?」(/C:YN の場合) のように選択肢が表示されます。
/S
[MS-DOS, Windows 95/98/Me] 選択肢の大文字・小文字を区別します。
/CS
[Windows Vista 以降] 選択肢の大文字・小文字を区別します。
/T[:]c,nn
[MS-DOS, Windows 95/98/Me] 選択する時間を設定します。cは時間切れのときの選択肢、nnは制限時間を秒数で指定します。この秒数は1桁か2桁で指定してください。なお、時間切れのときに何の選択肢が自動的に選ばれたかは表示されます。
/T nnnn
[Windows Vista 以降] 選択する時間を設定します。nnnnは制限時間を秒数で指定します。この秒数は4桁までの数値で指定してください。
時間切れの際に選択される選択肢を指定する場合は「/D」を使います。
/D c
[Windows Vista 以降] /T で指定した時間が経過したときに選択される選択肢を指定します。
<message>
[MS-DOS, Windows 95/98/Me] 「[Y,N]?」(/C:YN の場合) の前にメッセージを表示させます。指定しない場合、何もメッセージは表示されません。
/M <message>
[Windows Vista 以降] 「[Y,N]?」(/C:YN の場合) の前にメッセージを表示させます。指定しない場合、何もメッセージは表示されません。なお、メッセージにスペースを含む場合は「"」で囲む必要があります。

解説

このコマンドは、選択肢が選択されると終了コード(エラーコード)を返します。このコードは、1番目の選択肢を選ぶと1、2番目の選択肢を選ぶと2、n番目の選択肢を選ぶとnが返されます。choiceは選択を求めている時にCtrl+BreakやCtrl+Cが押されると0、エラー時には255を返します。終了コードで処理を分けるときはIf Errorlevel構文を使用します。

選択肢にないキーが押されるとビープ音が鳴ります(コンソールにBEL(07h)の文字が出力されます)。

サンプル1 (バッチファイル) [MS-DOS, Windows 95/98/Me]

@echo off
rem バッチファイルでの例
choice /C:YN 続行しますか
if errorlevel 2 goto OnExit
rem 終了コード 1 を処理する場合、ここでします。3 を処理する場合、上の行より前におきます。
call work.bat

rem N を選択するとここに飛びます。
:OnExit

サンプル2 (バッチファイル) [Windows Vista 以降]

@echo off
rem バッチファイルでの例
choice /C YN /M "続行しますか"
if errorlevel 2 goto OnExit
rem 終了コード 1 を処理する場合、ここでします。3 を処理する場合、上の行より前におきます。
call work.bat

rem N を選択するとここに飛びます。
:OnExit

サンプル3 (バッチファイル) [MS-DOS, Windows 95/98/Me]

@echo off
:OnRetry
foo.exe
if not errorlevel 1 goto OnExit
echo エラーが発生しました。もう一度処理を行う場合は30秒以内に「R」を押してください。
echo 処理をすぐにキャンセルする場合は「C」を押してください。
choice /C:RC /T:C,30 /N
if errorlevel 2 goto OnExit
if errorlevel 1 goto OnRetry

:OnExit

サンプル4 (バッチファイル) [Windows Vista 以降] [拡張構文]

@echo off
:OnRetry
foo.exe
if "%errorlevel%"=="0" goto OnExit
echo エラーが発生しました。もう一度処理を行う場合は30秒以内に「R」を押してください。
echo 処理をすぐにキャンセルする場合は「C」を押してください。
choice /C RC /T 30 /D C /N
if "%errorlevel%"=="1" goto OnRetry

:OnExit

Errorlevelを環境変数として用いるには拡張構文が有効になっている必要があります(通常は有効です)。また、「ERRORLEVEL」という環境変数が定義されているとうまく動きません(「%」のページもご覧ください)。