2013-05-23 3 views
4

나는 미쳐 가고 있습니다. 왜 누군가가 $ lastexitcode의 값이 정의되지 않았는지 설명 할 수 있습니까? 내 간단한 시도에

보기는 : 나는 dir 명령을 실행하는 경우 $ LASTEXITCODE 불행하게도 0

해야합니다, 그래서 내가하려고하면, 내가 올바른 출력을 얻을 :

$LASTEXITCODE 

내가되지 않은이 반환 값. "diiiiir"같은 명령이나 존재하지 않는 비슷한 명령을 주면 같은 상황이됩니다.

+2

'dir'은'$ lastexitcode'를 설정하지 않습니다. 다른 것을 시도하십시오. :) 이유는 모르겠지만 실제 실행 파일은 ('ping.exe'와 같이)합니다. 아마도 내부 명령이 오류 수준을 "필요로하지"않기 때문일 수 있습니다. – bzlm

+0

cmdlet을 찾을 수 없습니다 (예 : 'diiiiir'은 $ LASTEXITCODE를 설정하지 않습니다. –

+0

@bzlm'dir'은'Get-ChildItem'의 별칭입니다. 'Get-Alias ​​dir'을 참조하십시오. PowerShell cmdlet이기 때문에'$ LASTEXITCODE '을 설정하지 않습니다.그러나'cmd/c dir'을 실행하면 PowerShell의'Get-ChildItem'이 아니라'cmd'에서 내부'dir 명령을 실행하기 때문입니다. –

답변

8

$ LASTEXITCODE는 실행 파일 또는 배치 파일이 반환 할 때만 설정됩니다. PowerShell 명령은 $?로 검사 할 수 있습니다. 자세한 내용은 here을 참조하십시오.

0

특히 $ LASTEXITCODE는 "레거시"exectutables에 의해 설정됩니다 ... 이것은 이전 DOS/Windows % ERRORLEVEL % 변수와 같습니다.

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging 

일괄 (박쥐)/PowerShell을 호출 할 때 명령 (.CMD) 파일을 설정합니다 : 여기 PowerShell을 내 $의 LASTEXITCODE을 관리 할 수있는 가장 좋은 방법은 예를 들어

exit /b <exitcode> 

는, PowerShell을에서 명령 파일, 그리고

exit /b 2 

전화 :

을 다음 줄에 SetLASTEXITCODE.cmd라는 명령 파일을 생성
cmd /c "SetLASTEXITCODE.cmd" 

출력은 다음과 같아야합니다

exit /b 2 

이제 테스트 $의 LASTEXITCODE :

$LASTEXITCODE 

출력은 다음과 같습니다

2 

참고 : 소위 "레거시"실행에 (도 포함 이전 .com 파일), 개발자/프로그래머가 ERRORLEVEL을 어떤 프로그래밍 언어로 설정하지 않은 경우 exe가 (보통 API 호출을 통해) 작성된 다음 ERRORLEVEL/LASTEXITCODE가 설정되지 않습니다! 나는 80 년대 초반에 이런 식으로 글을 쓰곤 했었는데, 그때 구버젼이 internal commands과 같이 'ERRORLEVEL'과 exe 파일 (예 : .com) 또는 exe 파일을 설정하지 않은 'dir' .

마지막 예는 ... 다음 및 테스트 작업을 반복 포함하도록 명령 파일을 수정 ... 그것은 ... 명령 파일 내에서 모두 ERRORLEVEL을 설정하고 %의 ERRORLEVEL % 설정 $의 LASTEXITCODE로 종료

cmd /c "exit /b 2" 
echo %ERRORLEVEL% 
exit /b %ERRORLEVEL% 

즐거운 시간 되십시오 ...

관련 문제