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
'Program Tip' 카테고리의 다른 글
열거 형이 반복되지 않는 이유는 무엇입니까? (0) | 2020.11.16 |
---|---|
C ++에서 typedef를 언제 사용해야합니까? (0) | 2020.11.16 |
PowerShell의 명령 출력에 줄 바꿈을 추가하려면 어떻게해야합니까? (0) | 2020.11.16 |
대화 상자 내에서 jQuery 대화 상자를 닫는 방법은 무엇입니까? (0) | 2020.11.16 |
문자열이 double로 구문 분석 가능한지 확인하는 방법은 무엇입니까? (0) | 2020.11.16 |