エラーレベルのテストが間違っています。
二つの可能性があります。
@ECHO OFF
:BEGIN
ECHO 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF ERRORLEVEL 2 GOTO HELLO
IF ERRORLEVEL 1 EXIT /B
GOTO BEGIN
:HELLO
ECHO hello
GOTO BEGIN
は、Microsoftのサポート記事Testing for a Specific Error Level in Batch Filesを参照してください。
バッチユーザーは1または2のいずれかを押す必要があります。そうしないと、バッチ実行が継続されません。そうerrorlevelsをテストするエラーレベルが以上 Xは、コマンド(またはコマンド・ブロック)を実行している場合を意味する
if errorlevel X ...
で最高から最低まで行うことができます。
この構文を使用する利点は、コマンドブロックで遅延拡張を使用する必要がなくても機能することです。
第2の可能性は、次のとおりです。
@ECHO OFF
:BEGIN
ECHO 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF %ERRORLEVEL% == 1 EXIT /B
IF %ERRORLEVEL% == 2 GOTO HELLO
GOTO BEGIN
:HELLO
ECHO hello
GOTO BEGIN
明示的に条件を評価のIFの前に展開して、ここで、環境変数ERRORLEVEL
を参照することで、エラーレベルのテストの順序はもはや問題ではありません。 CHOICEおよび条件を評価するエラーレベルが(
... )
で定義されたコマンドブロック内にある場合
この方法の欠点は、遅延された拡張を使用する必要があることです。とSET IFコマンドの右の使用方法についてのヘルプは、コマンドプロンプトウィンドウif /?
とset /?
で
ランは、それぞれ遅れ拡張に関する情報を取得します。
これはWindowsコマンドインタープリタの内部コマンドであるため、ラベルSTART
として使用することはできますが、お勧めできません。ラベルを意味するSTART
と、START
というコマンドが、コマンドSTARTも使用すると、コマンドを意味するという問題が発生します。そのため、BEGIN
がラベルとして使用されます。
少なくともだけでバッチ処理を終了するバッチファイルを現像時のパラメータ/B
で常にコマンドEXITを使用することをお勧めいたしますが、完全に起動に使用階層とオプションを呼び出すには独立した実行中のコマンド処理を終了していませんcmd.exe
。
それは、コマンドプロンプトウィンドウから、それを実行して、バッチファイルをデバッグする方がはるかに簡単である代わりに、バッチファイルをダブルクリックすると(cmd.exe
が開いて、コンソールウィンドウを維持するためにオプション/K
で開始)(cmd.exe
が閉じるようにオプション/C
で開始しましたコマンドプロンプトウィンドウとしてexit
の代わりにexit /B
を使用している場合は、バッチ実行が完了したままになります。 Windowsコマンドインタープリタのオプションの詳細については、コマンドプロンプトウィンドウcmd /?
で実行してください。
GOTO BEGIN
2つのエラーレベル評価が実際に実行された後では、ここでは決して実行されません。したがって、このバッチファイルのようにも記述できます。
@ECHO OFF
:BEGIN
ECHO 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF ERRORLEVEL 2 GOTO HELLO
EXIT /B
:HELLO
ECHO hello
GOTO BEGIN
使用%ERRORLEVEL%の代わりERRORLEVEL – DavidPostill
のうん私悪かったです。ごめんなさい。 – geisterfurz007