Program Tip

ERRORLEVEL을 0으로 재설정하는 가장 쉬운 방법은 무엇입니까?

programtip 2020. 11. 16. 22:04
반응형

ERRORLEVEL을 0으로 재설정하는 가장 쉬운 방법은 무엇입니까?


ac # 프로젝트에 대한 일부 명령을 실행하는 빌드 후 이벤트가 있습니다. 마지막 명령은 때때로 ERRORLEVEL 값이 0이 아닌 경우 빌드가 실패합니다.

항상 ERRORLEVEL 값을 0으로 설정하기 위해 추가 명령 줄을 추가하고 싶습니다. 이를 수행하는 가장 편리한 방법은 무엇입니까?


사용하는 경우 부모를 종료하지 않고도 자식 배치 스크립트 내에서를 exit /b 0반환 할 수 있습니다 errorlevel 0.


트릭을 수행하는 것 같습니다.

ver > nul

모든 것이 작동하는 것은 아니며 그 이유도 명확하지 않습니다. 예를 들어 다음은 수행하지 않습니다.

echo. > nul
cls > nul

빌드 전 또는 빌드 후 이벤트에서 실행 파일의 반환 코드가 0보다 크고 실행 파일에 대한 호출이 빌드 전 또는 빌드 후 이벤트의 마지막 줄이 아닌 경우 빠르게 음소거하고 0 errorlevel아닌지 검사를 트리거하는 것은 명시 적으로 0을 반환하는 행으로 실패한 행을 따르는 것입니다.

cmd /c "exit /b 0"

이것은 본질적으로보다 더 작동합니다 이전에 언급 한 솔루션의 일반적인 조합 단지 전후하여 빌드 이벤트의 마지막 행.


"exit 0"이이 문제를 처리하는 좋은 방법이라는 것을 알았습니다.

사용 예 :

NET STOP UnderDevService / Y

0 번 출구

UnderDevService 서비스가 시작되지 않은 경우.


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

cd .

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

그러나 이것은 조금 더 빠를 수 있습니다.

type nul>nul

때문에 Process Monitor프로그램의 QueryDirectory호출에cd .

추신 : cd . 유닉스 쉘에 또 다른 좋은 부작용이 있습니다. 지우기 전에 열린 경우 터미널에서 재생성 된 작업 디렉토리를 복원합니다.


나는 VERIFY또는VERIFY > nul


이것이 "Post-build Event"등과 같은 스 니펫이라면 다음을 추가해도됩니다.

(...) || ver > nul

마지막 명령이 끝날 때.

또는

cmd /c "exit /b 0"

Windows 셸을 아는 독자라면 무슨 일이 일어나고 있는지, 어떤 의도가 있었는지 알 수 있습니다.

그러나 배치 스크립트를 사용하는 경우 akf의 답변에서 "하위 배치 스크립트"에 해당하는 경량 인 서브 로틴을 사용할 수 있습니다.

서브 루틴이 있습니다.

:reset_error
exit /b 0

그리고 그냥

call :reset_error

필요할 때마다.

다음은 완전한 예입니다.

@echo off
rem *** main ***

call :raise_error
echo After :raise_error ERRORLEVEL = %ERRORLEVEL%

call :empty
echo After :empty ERRORLEVEL = %ERRORLEVEL%

call :reset_error
echo After :reset_error ERRORLEVEL = %ERRORLEVEL%

:: this is needed at the end of the main body of the script
goto:eof

rem *** subroutines ***

:empty
goto:eof

:raise_error
exit /b 1

:reset_error
exit /b 0

출력되는 내용 :

After :raise_error ERRORLEVEL = 1
After :empty ERRORLEVEL = 1
After :reset_error ERRORLEVEL = 0

보시다시피 goto : eof를 통해 전화하고 돌아 오는 것만으로는 충분하지 않습니다.


Add >nul after each command that's likely to fail - this seems to prevent the build from failing.

You can still check the result of the command by examining %errorlevel%.

For example:

findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it)

Here are some other ways to reset the ErrorLevel state, which even work in MS-DOS (at least for version 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

The following methods work in MS-DOS only:

command /? > nul

fc nul nul > nul

For the sake of completeness, this sets the ErrorLevel state to 1, valid for both Windows and MS-DOS:

< nul find ""

I'm using this:

ping localhost -n 1 >null


I always just used;

set ERRORLEVEL=0

I've been using it for donkey's years.

참고URL : https://stackoverflow.com/questions/1113727/what-is-the-easiest-way-to-reset-errorlevel-to-zero

반응형