Windowsコマンドラインのユーザープロンプトで使用できるコマンドは2つあります。
/P
コマンド拡張が有効になっているすべてのWindows NTバージョンで使用可能なオプションで設定し、
- Windows Vista以降のWindowsバージョンのPCユーザー、およびWindows Server 2003以降のサーバーバージョンのWindowsでは、デフォルトでchoice.exeを使用できます。
setは、Windowsコマンドプロセッサの内部コマンドですcmd.exe
。/P
ユーザーに文字列を要求するオプションは、デフォルトで有効になっているコマンド拡張機能を有効にした場合にのみ使用できます。
choice.exeは、にある独立したコンソールアプリケーション(外部コマンド)です%SystemRoot%\System32
。choice.exe
のWindows Server 2003は%SystemRoot%\System32
、Windows XPではデフォルトで使用できないが、Windows Server 2003ではデフォルトで使用できる他の多くのコマンドと同様に、Windows XPで使用するためにWindows XPマシンのディレクトリにコピーできます。
次の理由により、SET / Pの使用よりもCHOICEの使用を優先することをお勧めします。
- CHOICEは、オプション(および)の後に指定されたキー(それぞれSTDINから読み取られた文字)のみを受け入れ、ユーザーが間違ったキーを押した場合はエラービープを出力します。
/C
Ctrl+C
- 選択では、許容できるキー以外のキーを押す必要はありません。SET / Pでユーザーがまたはで入力を終了する必要があるときに、受け入れ可能なキーが押されると、CHOICEは即座に終了します。RETURNENTER
- それはで可能ですCHOICE自動的にユーザーを待たずに、数秒後にデフォルトのオプションを続行するには、デフォルトのオプションとタイムアウトを定義します。
- 出力は以下のようなプロンプトを使って何かでバッチファイルを呼び出します別のバッチファイルから自動的にプロンプトに答えるに優れている
echo Y | call PromptExample.bat
使用上のCHOICEを。
- ユーザーの選択の評価はとはるかに簡単ですCHOICEためのCHOICEのに割り当てられている押されたキー(文字)に応じた値で終了ERRORLEVEL簡単に次に評価することができます。
- SET / Pで使用される環境変数は、ユーザーがキーを押すRETURNかENTER、ユーザーにプロンプトを表示する前に定義されていなかった場合は定義されません。SET / Pコマンドラインで使用される環境変数は、以前に定義されていれば現在の値を保持し、ユーザーがRETURNまたはを押すだけENTERです。
- ユーザーは、SET / Pでプロンプトが表示され、後で
cmd
構文エラーのためにバッチファイルの実行を終了するか、バッチファイルにまったく含まれていないコマンドを実行する文字列を含めて、何でも入力できます。良いコード化されたバッチファイル。SET / Pを誤って、または意図的に間違ったユーザー入力から保護するために、いくつかの努力が必要です。
以下は、推奨されるCHOICEを使用したプロンプトの例です。また、Windowsを実行している使用中のコンピューターでは使用できないSET / Pをchoice.exe
使用しています。
@echo off
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice
setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice=N"
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I "!UserChoice!" == "N" endlocal & goto :EOF
if /I not "!UserChoice!" == "Y" goto UseSetPrompt
endlocal
goto Continue
:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]? "
if errorlevel 2 goto :EOF
:Continue
echo So your are sure. Okay, let's go ...
注:このバッチファイルの用途は、使用して、Windows 95/98 / ME上で利用できない拡張コマンドcommand.com
の代わりに、cmd.exe
コマンドインタプリタとしての。
コマンドラインset "UserChoice=!UserChoice: =!"
が追加されecho Y | call PromptExample.bat
、Windows NT4 / 2000 / XPでこのバッチファイルを呼び出すことが可能になり、の使用を必要としませんecho Y| call PromptExample.bat
。2つの文字列比較を実行する前に、STDINから読み取った文字列からすべてのスペースを削除します。
echo Y | call PromptExample.bat
で結果Yは、SPACE環境変数に割り当てられたばかりUserChoice
。以下のため、それはプロンプト二回の処理につながる"Y "
どちらも大文字と小文字を区別しない等しい"N"
も"Y"
最初のすべてのスペースを削除せずに。したがってUserChoice
、値としてYSPACEをN
指定すると、2番目のプロンプトの実行時に、バッチファイルでデフォルトとして定義されたオプションを使用してもう一度プロンプトが実行され、次にバッチファイル処理が予期せず終了します。はい、SET / Pを安全に使用するのは非常に難しいですよね。
オプションのリストからユーザーに選択を求めるためのSET / PおよびCHOICEの使用法の詳細については、Windowsコマンドインタープリターが誤ったユーザー入力でバッチファイルの実行を終了しないようにする方法に関する回答を参照してください。
さらにいくつかのヒント:
- IFは、比較演算子の左右の2つの文字列を、二重引用符を含めて比較します。比較大文字と小文字を区別しないがそうすることの価値はない
UserChoice
とN
してY
、しかし、の値UserChoice
に囲ま"
持つ"N"
と"Y"
。
- IF比較演算子
EQU
とNEQ
2つの文字列を比較するために2147483647としないように範囲-2147483648で2つの整数を比較するための主要な設計されています。EQU
そして、NEQ
文字列の比較のためにも仕事が、整数に左の文字列を変換するために役に立たない試みに二重引用符内の文字列を比較することになります。EQU
またNEQ
、有効なコマンド拡張でのみ使用できます。文字列の比較のための比較演算子がある==
とnot ... ==
さえとしても、無効なコマンド拡張機能とその仕事command.com
MS-DOSとWindowsの95/98 / MEはすでに、それらをサポート。詳細についてのIF比較演算子を見、WindowsのバッチファイルでなどNEQ、LSS、GTRにシンボルに相当します。
- コマンドは、
goto :EOF
本当に終了バッチファイルの処理にコマンド拡張機能を有効にする必要があります。詳細については、GOTO:EOFの戻り先を参照してください。
使用するコマンドとその機能を理解するには、コマンドプロンプトウィンドウを開き、そこで次のコマンドを実行し、各コマンドについて表示されるすべてのヘルプページをよく読みます。
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
以下も参照してください。
SET AREYOUSURE=N
コマンドウィンドウで既にスクリプトを実行している場合に選択をクリアするために、プロンプトの前に追加することだけです。これがない場合、デフォルトは以前に選択された選択のままになります。