ERRORLEVEL을 0으로 설정


14

설치 프로그램을 감싸는 배치 파일이 있습니다. 이 배치 파일은 설치 관리자가 반환 한 오류 수준을 확인하고 그에 따라 인쇄합니다.

set ERRORLEVEL=0배치 파일을 시작하기 직전에 명령 프롬프트에서 실행 하면 (동일한 명령 창 / 환경에서) 설치 프로그램이 오류 수준을 엉망으로 만들지 않으며 배치 스크립트가 항상 전달됩니다. 필자는 %ERRORLEVEL%Windows에서 정의한 변수이며 프로그램 및 스크립트에서 오류를 인쇄하는 데 사용되며 배치 파일이나 다른 변수에서 변수를 사용하면 언제든지 자신의 위험에 처할 수 있다고 가정합니다. 다른 과정.

주어진 환경에서 오류 수준을 설정하면 어떻게 든 종료 코드 홀더로 오류 수준 사용을 종료합니다. 이것이 왜 그런지 아는 사람이 있습니까? 나에게 그 이상한 예상치 못한 행동. 주제에 대한 모든 정보는 대단히 감사하겠습니다!


답변:


14

시스템 변수를 일반 변수로 재정의하고 있습니다. 이렇게하면 명령 세션이 닫힐 때까지 시스템이이를 사용하지 않습니다.

가장 좋은 방법은 사용하는 것입니다

exit /b 0

다른 배치 파일에 넣고 기본 스크립트에서 호출하십시오. 숫자 0은 원하는 곳 errorlevel입니다. errorlevelecho, findstr 등과 같이 사용자 를 재설정하는 명령을 사용하십시오 .

예를 들어 다음 명령은 ERRORLEVEL배치 파일 내에서 모두 0으로 설정 됩니다.

VERIFY > nul

cmd /c "exit /b 0"

ver > nul     

2
거의 맞습니다. 다음을 사용하여 사용자 정의 값을 정의하지 않으면 "시스템"에서 동적 ERRORLEVEL을 사용할 수 있습니다.set "errorlevel="
dbenham

Windows에서 시스템 변수를 일반 변수로 다시 정의 할 수있는 이유는 무엇입니까? 두 정의가 모두 존재합니까? 단지 echo와 다른 명령은 이제 일반 명령을 가리 킵니까? 따라서 프로그램은 여전히 ​​시스템 변수를 업데이트 할 수 있습니다. 명령 프롬프트를 통해 액세스 할 수 없습니까?
user972276

1
"echo, findstr 등과 같은 오류 수준을 재설정하는 명령을 사용하십시오." echo 명령은 errorlevel 변수를 재설정 하지 않습니다 .
14:33에

다른 사람이 말한 것처럼 경우, errorlevel 변수 를 사용자 / 배치하여 "수동으로"설정되어 "set errorlevel=0"errorlevel변수는 더 이상 종료 코드를 반영하지 않습니다,하지만 당신은 여전히 함께 종료 코드에 액세스 할 수 있습니다 if errorlevel do something.
Kevin Fegan

(1)보다 일반적인 질문은 "ERRORLEVEL을 42와 같은 임의의 값으로 설정하는 방법"입니다.  cmd /c exit 42 그것에 대한 가장 좋은 답변 인 것 같습니다. (2)  dbenham이 지적했듯이/b 또는 따옴표 가 필요하지 않습니다  .
스캇

12

ERRORLEVEL, PATH, CD, DATE, TIME 등과 같은 동적 시스템 변수에 고유 한 값을 지정해서는 안됩니다. 그렇게하면 코드가 동적 값을 보지 못하게됩니다. 사용자 정의 값을 간단히 정의하여 동적 값을 복원 할 수 있습니다. 예를 들면 다음과 같습니다.

set "errorlevel="

오류 수준을 0으로 설정하려면 직관적이지 않지만 매우 효과적인이 구문을 사용할 수 있습니다 (call ). 통화 후 공간이 중요합니다. errorlevel을 1로 설정하려면을 사용할 수 있습니다 (call). 통화 후 공간이 없어야합니다.

(call)
echo %errorlevel%
(call )
echo %errorlevel%

오류 수준을 설정하는보다 직관적이지만 덜 편리한 방법은 배치 파일에 전용 서브 루틴을 사용하는 것입니다.

call :setErr 1
echo %errorlevel%
call :setErr 0
echo %errorlevel%
exit /b

:setErr
exit /b %1

또는 명령 행에 다음을 사용할 수 있습니다.

cmd /c exit 1
echo %errorlevel%
cmd /c exit 0
echo %errorlevel%

8

나는 개인적으로 이것을 사용합니다 :

cd .

유닉스 쉘에서도 작동합니다.


그러나 type nul>nul프로세스 모니터 QueryDirectorycd .PS 에 대한 호출을 표시하기 때문에 cd .유닉스 쉘에서 또 다른 좋은 부작용이 있습니다. 삭제 전에 열린 경우 터미널에서 다시 작성된 작업 디렉토리를 복원합니다.
Andry

2

ErrorLevelMS-DOS에서도 작동 하는 상태 를 재설정하는 다른 방법은 다음과 같습니다 (적어도 버전 6.22의 경우).

more < nul > nul

rem // The `> nul` part can be omitted in Windows but is needed in MS-DOS to avoid a line-break to be returned:
sort < nul > nul

다음 방법은 MS-DOS에서만 작동합니다.

command /? > nul

fc nul nul > nul

완료를 위해 Windows 및 MS-DOS 모두에 대해 ErrorLevel상태를로 설정합니다 1.

< nul find ""

1

이것이 내가 찾은 유일한 것입니다.

call (exit /b 0)

ERRORLEVEL을 감지하는 타사 스크립트를 사용하지만 자체적으로 오류 수준을 재설정하지 않는 스크립트에서 필요합니다.


0

이것들도 작동합니다 : (오류 수준을 1로 설정)

방법 1

color 00

방법 2

echo A | find "B"

이를 사용하여 오류 수준 1-26을 설정할 수도 있습니다.

echo Your errorlevel<sup>th</sup> character between A-Z | choice /c:Enter A-Z here /n
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.