2017-01-01 13 views
-1

この選択コマンドが機能しない理由について私はこの質問を持っています。私はこのサイト上で見て、すべての私のスクリプトを比較し、私はちょうどそれは私が変更のカップルを作り、不要なコードを削除した http://www.computerhope.com/issues/ch001674.htmバッチ選択コマンドが機能しません

@ECHO OFF 
:START 
echo 1 to quit or 2 to print hello and go back to this screen 
CHOICE /C:12 /N 
IF ERRORLEVEL ==1 GOTO QUIT 
IF ERRORLEVEL ==2 GOTO HELLO 
GOTO :START 
:QUIT 
EXIT 
:HELLO 
ECHO hello 
GOTO :END 
:END 
+1

使用%ERRORLEVEL%の代わりERRORLEVEL – DavidPostill

+0

のうん私悪かったです。ごめんなさい。 – geisterfurz007

答えて

0

動作しない理由を把握することはできませんしました。

@ECHO OFF 
:START 
CLS 
ECHO=1 to quit or 2 to print hello and go back to this screen 
CHOICE /C 12 /N 
IF ERRORLEVEL 2 (CALL :HELLO & GOTO START) 
EXIT 
:HELLO 
ECHO=hello 
TIMEOUT 2 1>NUL 
0

エラーレベルのテストが間違っています。

二つの可能性があります。

@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 
0

シンプル:

@ECHO OFF 
:START 
echo 1 to quit or 2 to print hello and go back to this screen 
CHOICE /C 12 /N 
GOTO OPTION-%ERRORLEVEL% 

:OPTION-1 Quit 
EXIT 

:OPTION-2 Hello 
ECHO hello 
GOTO START 
+0

あります;)ありがとう – Juggler

関連する問題