2014-01-25 7 views
0

나는 배치 파일 errorlevel 반환 문제에서 고민하고 대답을 찾을 수 없습니다.
아무도 내게 어떤 힌트를 줄 수 있습니까?배치 파일 호출 errorlevel을 두 번

외부 바이너리 파일 external.exe는 배치 파일의 리턴 코드 (0 성공, 기타 실패)를 읽음으로써 수행 할 작업을 결정합니다.

배치 파일 mybatch.cmd에서 스크립트 (perl)를 실행하고 그 결과를 배치 파일에 반환하고 싶습니다. 예를 들어

, mybatch.cmd :

@echo off 
myperl.pl 
exit %errorlevel% 

myperl.pl 동안입니다 :

#!perl.exe exit 0; 

그래서 내가 myperl.pl 배치 파일에 0 값을 반환하고 싶었다, 배치 파일은 0을 external.exe 파일로 반환합니다.

그러나 external.exe가 예상대로 작동하지 않았습니다. 내가 표시 줄을 추가하면 그때 CLI에서 mybatch.cmd 실행하고있는 경우

1) "에코 % ERRORLEVEL %"CLI에서, 나는 그것이 0

2)입니다 볼 수 있습니다 myperl.pl의 리턴 코드, 나는 myperl.pl의 리턴 코드는 예를 들어 정확히 0

입니다 볼 수 있습니다 : 그것은 0을 표시합니다

@echo off 
myperl.pl 
echo %errorlevel% 
REM exit %errorlevel% 

, 펄 스크립트가 정확하게 값을 반환 있도록.

3) 줄을 추가하여 수동으로 반환 코드를 0으로 설정하면 external.exe가 올바르게 작동합니다.

@echo off 
myperl.pl 
result=0 
exit %result% 

정말 이상합니다. 어떤 아이디어? external.exe를 제어 할 수 없어서 디버깅을 할 수 없었습니다. 이 예에서

는 %의 ERRORLEVEL %의 두 배라고 : 일괄 myperl.pl에서
1) 돌아갑니다.
2) mybatch.cmd에서 external.exe로 돌아갑니다. 그게 문제가 될까요?

답변

0

근본 원인을 찾아 냈습니다.

myperl.pl은 풀 경로와 함께 있어야하며, 그렇지 않으면 external.exe는 myperl.pl이 어디에 있는지를 알지 못합니다.

0

당신이 말한 모두는 맞습니다. myperl.pl은 특정 errorlevel을 반환하고, 배치 파일은 그것을 취한 다음 적절한 errorlevel 값을 반환합니다. 문제는 이것입니다 : 일괄 파일 에 어떤 프로세스 errorlevel 반환?

이 스키마는 항상 부모 - 자식 관계로 작동합니다. 부모 프로세스는 하위 프로세스를 실행하고 종료 될 때까지 대기합니다. 그러면 부모 프로세스는 하위에서 반환 한 errorlevel 값을 사용합니다. 문제를 해결하는 방법은 external.exe 프로그램이 일괄 처리 파일 (cmd.exe)을 자식으로 실행하는 경우입니다! 그러나 "external.exe"를 제어 할 수 없다면 문제를 해결할 수있는 방법이 없습니다 ...

어떻게 외부를 알 수 있습니까?exe 프로그램 "반환 코드 (0-success, other-fail)를 읽고 배치 파일을 결정하여 수행 할 작업을 결정하십시오." 이 시점에서 당신이 혼란 스럽다고 생각합니다.

+0

@Aacini에 감사드립니다. 설명서에 "external.exe가 mybatch.cmd의 반환 값을 읽고 0- 성공, 기타 실패"라고 표시됩니다. 그리고 만약 내가 수동으로 배치 코드에서 반환 코드를 0 또는 1로 설정하면. "결과 설정 = 0"및 "exit % result %", external.exe 예상대로 잘 작동합니다. 문제는 배치 파일 대신 perl 파일에 값을 설정해야한다는 것입니다. – user1748640