Development Tip

배치 파일-오류 처리

yourdevel 2020. 12. 12. 12:34
반응형

배치 파일-오류 처리


현재 asp.net 솔루션 배포를위한 첫 번째 배치 파일을 작성 중입니다. 나는 일반적인 오류 처리 접근 방식을 위해 인터넷 검색을 해왔고 실제로 유용한 것을 찾을 수 없습니다.

기본적으로 어떤 일이 잘못되면 중단하고 무엇이 잘못되었는지 인쇄하고 싶습니다.

누구든지 내게 어떤 조언을 줄 수 있습니까?


일반적으로 조건부 명령 연결 연산자는 ERRORLEVEL보다 훨씬 편리합니다.

yourCommand && (
  echo yourCommand was successful
) || (
  echo yourCommand failed
)

주의해야 할 합병증이 하나 있습니다. 성공 분기의 마지막 명령이 오류를 발생 시키면 오류 분기가 실행됩니다.

yourCommand && (
  someCommandThatMayFail
) || (
  echo This will fire if yourCommand or someCommandThatMayFail raises an error
)

해결 방법은 성공 분기 끝에 성공할 수있는 무해한 명령을 삽입하는 것입니다. (call )ERRORLEVEL을 0으로 설정하는 것 외에는 아무것도하지 않는를 사용 하고 싶습니다 (call). ERRORLEVEL을 1로 설정하는 것 외에는 아무것도하지 않는 결과 가 있습니다.

yourCommand && (
  someCommandThatMayFail
  (call )
) || (
  echo This can only fire if yourCommand raises an error
)

ERRORLEVEL을 사용하여 오류를 감지 할 때 필요한 복잡한 예제는 Windows 배치 파일에서 0이 아닌 (오류) 반환 코드를 확인하는 완벽한 방법을 참조하십시오 .


가능한 경우 ERRORLEVEL을 사용하는 것이 가장 쉬운 방법입니다. 그러나 일부 작업을 수행하기 위해 외부 프로그램을 호출하고 적절한 코드를 반환하지 않는 경우 출력을 'find'로 파이프하여 오류 수준을 확인할 수 있습니다.

c:\mypath\myexe.exe | find "ERROR" >nul2>nul
if not ERRORLEVEL 1 (
echo. Uh oh, something bad happened
exit /b 1
)

또는 무슨 일이 있었는지에 대한 자세한 정보를 제공하려면

c:\mypath\myexe.exe 2&1> myexe.log
find "Invalid File" "myexe.log" >nul2>nul && echo.Invalid File error in Myexe.exe && exit /b 1
find "Error 0x12345678" "myexe.log" >nul2>nul && echo.Myexe.exe was unable to contact server x && exit /b 1

ERRORLEVEL 외에 배치 파일에는 오류 처리가 없습니다. 더 강력한 스크립팅 언어를보고 싶을 것입니다. 코드를 PowerShell 로 옮겼습니다 .

.Net 어셈블리 및 메서드를 쉽게 사용할 수있는 기능은 제가 PowerShell을 시작한 주요 이유 중 하나였습니다. 개선 된 오류 처리는 또 다른 것입니다. Microsoft가 이제 모든 서버 프로그램 (Exchange, SQL Server 등)이 PowerShell 구동이 가능하도록 요구하고 있다는 사실은 순수하게 장식되었습니다.

지금 당장은 학습에 투자하고 PowerShell을 사용하는 데 시간이 많이 소요되는 것처럼 보입니다.


를 사용하여 로컬 네트워크에서 성공적인 핑을 트랩 할 수 있습니다 ERRORLEVEL.

@ECHO OFF
PING 10.0.0.123
IF ERRORLEVEL 1 GOTO NOT-THERE
ECHO IP ADDRESS EXISTS
PAUSE
EXIT
:NOT-THERE
ECHO IP ADDRESS NOT NOT EXIST
PAUSE
EXIT

이 기능은 OP 이후에 추가 된 것 같지만 향후 참조를 위해 명령 창에 출력되는 오류는 표준 출력과 독립적 인 파일로 리디렉션 될 수 있습니다.

명령 1> 파일-명령의 표준 출력을 파일에 씁니다.

명령 2> 파일-명령의 표준 오류를 파일에 씁니다.


Python Unittest, Bat 프로세스 오류 코드 :

if __name__ == "__main__":
   test_suite = unittest.TestSuite()
   test_suite.addTest(RunTestCases("test_aggregationCount_001"))
   runner = unittest.TextTestRunner()
   result = runner.run(test_suite)
   # result = unittest.TextTestRunner().run(test_suite)
   if result.wasSuccessful():
       print("############### Test Successful! ###############")
       sys.exit(1)
   else:
       print("############### Test Failed! ###############")
       sys.exit()

박쥐 코드 :

@echo off
for /l %%a in (1,1,2) do (
testcase_test.py && (
  echo Error found. Waiting here...
  pause
) || (
  echo This time of test is ok.
)
)

Its extremely easy! Create a file that contains:

call <filename>  // the file you made
cls
echo An error occured!
<Your commands>
pause

So now when you start it, it will launch your program as normal. But when anything goes wrong it exits and continues the script inside the first file. Now there you can put your own commands in.

참고URL : https://stackoverflow.com/questions/1164049/batch-files-error-handling

반응형