문제

.CMD 파일을 통해 테스트 스위트로 만든 프로그램을 자동화하려고합니다.

%ErrorLevel %를 통해 반환 코드를 실행 한 프로그램을 얻을 수 있습니다.

내 프로그램에는 각 유형의 오류에 대한 특정 반환 코드가 있습니다.

예를 들어:

1- 그러한 이유로 실패한 것을 의미합니다.

2- 다른 이유로 실패한 것을 의미합니다

...

Echo 실패 : 테스트 케이스 실패, 오류 수준 : % ErrorLevel % >> testsuite1log.txt

대신 나는 어떻게 든 말하고 싶다 :

Echo 실패 : 테스트 사례 실패, 오류 이유 : LookUperror (%ErrorLevel%) >> testsuite1log.txt

.BAT 파일로 가능합니까? 아니면 Python/Perl과 같은 스크립팅 언어로 이동해야합니까?

도움이 되었습니까?

해결책

당신은 이것을 아주 깔끔하게 할 수 있습니다 ENABLEDELAYEDEXPANSION 옵션. 이것은 당신이 사용할 수 있습니다 ! 이후에 평가되는 가변 마커로서 %.

REM Turn on Delayed Expansion
SETLOCAL ENABLEDELAYEDEXPANSION

REM Define messages as variables with the ERRORLEVEL on the end of the name
SET MESSAGE0=Everything is fine
SET MESSAGE1=Failed for such and such a reason
SET MESSAGE2=Failed for some other reason

REM Set ERRORLEVEL - or run command here
SET ERRORLEVEL=2

REM Print the message corresponding to the ERRORLEVEL
ECHO !MESSAGE%ERRORLEVEL%!

유형 HELP SETLOCAL 그리고 HELP SET 지연된 확장에 대한 자세한 내용은 명령 프롬프트에서.

다른 팁

다음 코드와 같은 작업을 수행 할 수 있습니다. CMD Quirk로 인해 오차 레벨 비교가 순서가 감소해야합니다.

setlocal

rem Main script
call :LookupErrorReason %errorlevel%
echo FAILED Test case failed, error reason: %errorreason% >> TestSuite1Log.txt
goto :EndOfScript

rem Lookup subroutine
:LookupErrorReason
  if %%1 == 3 set errorreason=Some reason
  if %%1 == 2 set errorreason=Another reason
  if %%1 == 1 set errorreason=Third reason
goto :EndOfScript

:EndOfScript
endlocal

그와 똑같지는 않지만 서브 루틴이 있지만 A를 사용하여 텍스트로 변수를 채울 수 있습니다. 이동 해결 방법.

이 테스트 스위트가 더 강력한 언어를 사용하기 위해 상당히 자라면 더 쉬울 수 있습니다. Perl 또는 Windows 스크립팅 호스트가 도움이 될 수 있습니다.

예, 전화를 사용할 수 있습니다. 새 라인에 호출하고 ErrorCode를 PAS에 넣습니다. 이것은 작동하지만 테스트하지 않았습니다.

C:\Users\matt.MATTLANT>help call
Calls one batch program from another.

CALL [drive:][path]filename [batch-parameters]

  batch-parameters   Specifies any command-line information required by the
                     batch program.

sedit : Orry 나는 약간 오해를했을 수도 있지만, 당신은 또한 사용할 수 있습니다.

값을 역순으로 테스트하고 과부하 된 동작을 사용하십시오. 만약에:

@echo off
myApp.exe
if errorlevel 2 goto Do2
if errorlevel 1 goto do1
echo Success
goto End

:Do2
echo Something when 2 returned
goto End

:Do1
echo Something when 1 returned
goto End

:End

더 강력하고 싶다면 이와 같은 것을 시도 할 수 있습니다 ( %1을 %오류 레벨로 교체해야하지만 테스트하기가 더 어렵습니다). 처리하는 각 오류 레벨에 대한 레이블을 넣어야합니다.

@echo off
echo passed %1
goto Label%1

:Label
echo not matched!
goto end

:Label1
echo One
goto end

:Label2
echo Two
goto end

:end

테스트는 다음과 같습니다.

C:\>test
passed
not matched!

C:\>test 9
passed 9
The system cannot find the batch label specified - Label9

C:\>test 1
passed 1
One

C:\>test 2
passed 2
Two

'If ErrorLevel'문을 사용하여 리턴 코드를 기반으로 다른 작업을 수행 할 수 있습니다.

보다:

http://www.robvandanderwoude.com/errorlevel.html

두 번째 질문에 응답하여 Windows 배치 파일이 본질적으로 제한되어 있기 때문에 스크립팅 언어를 사용하는 것으로 이동합니다. Perl, Python, Ruby 등을위한 훌륭한 Windows 배포판이 있으므로 실제로 사용하지 않을 이유가 없습니다. 나는 개인적으로 Windows에서 Perl 스크립팅을하는 것을 좋아합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top