1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

dosコマンドライン選択コマンド使用詳細説明

2022-02-10 21:06:46

Choiceコマンド

このコマンドは、ユーザーに文字を入力させ、別のコマンドを実行させるために使用します。このコマンドは、/c: パラメーターとともに使用し、c: の後には、入力可能な文字をスペースなしで入力するプロンプトを表示する必要があります。コード1234 .......................が返されます。このコマンドは、一部のWindowsバージョン(WindowsXPなど)で使用できない場合があります。

構文
CHOICE: [/C[:]キーテーブル]. [N] [/S] [/T[:]選択値,秒数]。[テキストを表示する]
ここで、/C はオプションのキーストローク、/N は表示しないプロンプトメッセージ、/S は大文字小文字を区別する方法、/T は /C で定義した選択値で、指定時間内に選択が行われないと自動的に実行されるものです。表示文は、CHOICEコマンド実行時のプロンプトメッセージである。選択結果はERRORLEVELの値で表示されます。

@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag
 REM should determine the error code with the highest value first
if errorlevel 2 goto mem
if errorlevel 1 goto end

:defrag
c:\dos\defrag
goto end

:mem
mem
goto end

:end
echo good bye

このファイルを実行すると、defrag,mem,end[D,M,E]と表示されます?dはdefragと書かれたセグメントを実行、mはmemと書かれたセグメントを実行、eはendと書かれたセグメントを実行し、それぞれのセグメントの最後にgoto endで終了ラベルにジャンプし、good byeと表示されてファイルが終了するようになっています。

置き換え可能なコマンド

<スパン WindowsXPでCHOICEコマンドが使えない状況で、同様の機能を使いたい場合は、SETコマンドを使うことができますので、Setコマンドの/Pオプションを参照してください。

choice は一般的に cmd バッチで使用され、ユーザーの入力に基づいた異なるアクションを実行するために非常に便利で、次のようなものがあります。

以下は、ユーザーの選択に基づいて実行される2つのプログラムです。

@echo off
Remote Assistance Toolset
:start
cls
color 0a
MODE con: COLS=60 LINES=20
echo.
echo ===============================
echo Please select the remote tool
echo ===============================
echo.
echo 1. AnyDesk
echo. 2.
echo 2. TeamViewer
echo.
echo. echo.
:cho
set choice=
set /p choice= Please enter the tool number:
IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
if /i "%choice%"=="1" goto AnyDesk
if /i "%choice%"=="2" goto TeamViewer

:AnyDesk
AnyDesk.exe
exit

:TeamViewer
TeamViewer.exe
exit


ここでは、choiceコマンドの使い方を紹介します。


CHOICE [/C選択肢] [/N] [/CS] [/Tタイムアウト /D選択肢] [/Mテキスト]を選択します。

説明
このツールは、ユーザーが選択リストの中から項目を選択し、選択された項目のインデックスを返すものです。

パラメータ一覧です。
/C choices 作成するオプションのリストを指定します。デフォルトのリストは "YN"です。

/N プロンプトのオプション一覧を非表示にします。プロンプトの前のメッセージは表示され、オプションは有効なままです。

/大文字・小文字を区別するオプションを選択できるようにします。デフォルトでは、大文字と小文字は区別されません。

/T timeout デフォルトの選択を行う前に一時停止する秒数です。使用可能な値は0~9999です。0を指定すると、一時停止は行われず、デフォルトのオプションが選択されます。

/D choice nnnn秒後のデフォルトの選択肢を指定します。この文字は、/Cオプションで指定した選択肢のセットに含まれていなければなりません。また、nnnnは/Tで指定する必要があります。

/M text プロンプトの前に表示するメッセージを指定します。指定しない場合は、プロンプトのみが表示されます。

/? このヘルプメッセージを表示します。

注意
環境変数ERRORLEVELには、セレクションセットから選択されたキーのインデックスが設定されます。最初にリストアップされた選択項目は1を返し、2番目の選択項目は2を返す、といった具合である。ユーザーが有効な選択項目でないキーを押した場合、ツールは警告音を鳴らす。ツールがエラー状態を検出した場合、ERRORLEVEL値として255を返します。ユーザーが Ctrl+Break または Ctrl+C を押した場合、ツールは ERRORLEVEL 値 0 を返します。バッチプログラムで ERRORLEVEL パラメータを使用する場合、パラメータは降順にソートされます。


CHOICE /?
CHOICE /C YNC /M "確認する場合はYを、しない場合はNを、キャンセルする場合はCを押してください"。
CHOICE /T 10 /C ync /CS /D y

CHOICE /C ab /M "オプション1はaを、オプション2はbを選択してください"
CHOICE /C ab /N /M "オプション1はaを、オプション2はbを選択してください"

以下は、海外サイトからの紹介です。

CHOICEコマンドはMS-DOS 6で導入され、MS-DOS 7(Windows 95/98)でも利用可能です。

Windows NT 4、2000、XPでは、CHOICEは標準のディストリビューションの一部ではなくなりました。しかし、Windows NT 4 Resouce Kitの一部として利用可能です。
一方、古い未使用のMS-DOS 6やWindows 95/98のバージョンがまだ眠っている場合は、そのバージョンのCHOICE.COMを代わりに使用することができます。(*)
PATHにあるディレクトリにコピーするだけです。

注意:16ビットDOS版は、64ビットWindows版では動作しません。
CHOICEは、Windows Vista以降のバージョンで再び利用可能になります。

ほとんどの場合、このコマンドは後のバージョンでも常に利用できるということですが、16ビットシステムでは64ビットシステムにはもう付いてこないことに注意してください。私たちがインストールする64ビットシステムでは、すでに64 CHOICEコマンドが統合されていますので、安心して利用することができます。

備考
環境変数ERRORVALUEには、ユーザーが選択リストの中から選択したキーのインデックスが設定されます。最初に割り当てたキーは値1、2番目は値2、3番目は値3、といった具合に返されます。もしユーザーが割り当てたキーの中間でないキーを押した場合、Choice.exeは警告音を鳴らします(つまり、BELまたは07h文字をコンソールに送ります)。Choice.exeがエラー状態を検出した場合、エラー値255を返します。ユーザがCtrl+BreakまたはCtrl+Cを押した場合、Choice.exeはエラー値0を返します。バッチプログラム内でエラー値パラメータを使用する場合は、降順に並べてください。


バッチファイルに次の構文を入力します。

choice /c ync



Choice.exeを実行すると、次のような文が表示されます。
[Y,N,C]?
バッチファイルに次の構文を入力します。
choice /c ync /n /m Yes, No or Continue?
Choice.exeを実行すると、次のような文が表示されます。
Yes, No, or Continue?
文法に以下のようにテキストを追加します。
選択肢 /c ync /m はい、いいえ、または続ける
Choice.exeを実行すると、次のような文が表示されます。
Yes, No, or Continue [Y,N,C]?
tコマンドラインオプションは、制限時間(ユーザーが応答しなければならない時間)を設定し、その制限時間内にユーザーが応答しない場合に表示される値を指定します。制限時間を5秒に設定し、デフォルト値としてNを指定するには、バッチプログラム内で次のコマンドラインを入力します。
選択 /c ync /t 5 /d n
バッチファイルがChoice.exeを起動すると、以下のメッセージが表示されます。
[Y,N,C]?
もしユーザーが5秒以内にキーを押さなかった場合、Choice.exeはNを選択し、エラー値2を返します。それ以外の場合は、ユーザーの選択に対応する値を返します。