오류 수준 테스트가 잘못되었습니다.
@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
이 레이블로 사용됩니다.
적어도에만 일괄 처리를 종료하는 배치 파일을 개발 중에 명령을 항상 매개 변수 /B
와 EXIT를 사용하는 것이 좋습니다,하지만 완전히 시작에 사용되는 호출 계층 구조 및 옵션에 독립 실행 명령 프로세스를 종료하지 않습니다 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
사용 % ERRORLEVEL % 대신 ERRORLEVEL – DavidPostill
의 그래, 내 나쁜했다. 죄송합니다. – geisterfurz007