2017-01-01 14 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를 눌러야합니다. 그렇지 않으면 배치 실행이 계속되지 않습니다. 그래서 ERRORLEVEL이위한 테스트는 오류 수준은 크거나 X가 다음 명령 (또는 명령 블록)을 실행할 경우 의미

if errorlevel X ... 

으로 높은 값에서 낮은 수행 될 수있다.

이 구문을 사용하면 지연 확장을 사용하지 않고도 명령 블록에서 작동하는 이점이 있습니다.

번째 가능성은 :

@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 /?set /?에서

를 실행합니다.

START 레이블은 Windows 명령 인터프리터의 내부 명령이므로 사용하는 것이 좋지만 권장되지는 않습니다. 레이블을 의미하는 START을 찾는 데 문제가 발생하고 일괄 파일에서 START 명령도 사용할 때 명령을 의미하는 START 명령을 의미합니다. 그 이유는 BEGIN이 레이블로 사용됩니다.

적어도에만 일괄 처리를 종료하는 배치 파일을 개발 중에 명령을 항상 매개 변수 /BEXIT를 사용하는 것이 좋습니다,하지만 완전히 시작에 사용되는 호출 계층 구조 및 옵션에 독립 실행 명령 프로세스를 종료하지 않습니다 cmd.exe.

그것은 명령 프롬프트 창 내에서 그것을 실행하여 배치 파일을 디버깅하는 것이 훨씬 쉽다 대신 배치 파일을 더블 클릭의 (cmd.exe가 열려 콘솔 창을 유지하는 옵션 /K 시작) (cmd.exe는 종료 옵션 /C 시작 배치 실행 완료) 명령 프롬프트 창에 exit 대신 exit /B을 사용하는 경우 계속 열어 둡니다. Windows 명령 인터프리터의 옵션에 대한 자세한 내용은 명령 프롬프트 창 cmd /?에서 실행하십시오.

GOTO BEGIN 두 개의 오류 수준 평가가 실제로 여기에서 실행 된 후에는 없습니다. 따라서이 배치 파일로도 쓸 수있다 :

@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

그것은 않습니다;) thanks – Juggler