2009-12-17 1 views
5

: 나는 다양한 방법으로 그것을 실행하면왜 cmd.exe는 64 비트 시스템에서 다른 오류 수준 동작을합니까? 내가 포함 (예를 들어) 배치 스크립트라는 이름의 temp.bat을하면

exit /b 1 

, 나는 64 비트 대 내 32 비트 XP 시스템에서 다른 동작을 얻을 XP 시스템. 에

32 비트 : 64 비트에

> temp.bat 
> echo %ERRORLEVEL% 
1 
> cmd /c temp.bat 
> echo %ERRORLEVEL% 
0 

는 :

> temp.bat 
> echo %ERRORLEVEL% 
1 
> cmd /c temp.bat 
> echo %ERRORLEVEL% 
1 

나는 cmd.exe를 옵션을 통해 검색 한 내가 어떤 옵션이 어떻게 제어를 찾을 수 없었습니다 배치 스크립트에서 오류 수준 정보를 전달합니다. 이 시점에서 나는이 차이에 대해 합리적인 설명을 찾을 수 없습니다.

+0

내 생각 엔 원래 동작을 유지하는 32 비트 버전은 이전 버전과의 호환성 때문입니다. 64 비트 버전에는 이러한 요구 사항이 없으므로 자동화 된 스크립트에보다 친숙하게 동작합니다. –

+0

아하! 레이몬드의 딸 [http://blogs.msdn.com/oldnewthing/archive/2003/12/24/45779.aspx] 대 레이몬드의 들러리 [http://blogs.msdn.com/oldnewthing/archive/2009/12/02] /9931184.aspx#9931572] –

+0

여기에서 재현 할 수 없습니다. 32 비트와 64 비트 모두 동일하게 작동합니다. – Joey

답변

7

실제로 모든 인스턴스에서 올바르게 작동하지 않으므로 exit/b를주의해야합니다. 예를 들어 : temp.bat는하지만, 출구/B 1은 1 인쇄 할 기대가 포함되어

temp.bat&&echo 0||echo 1

경우는 없습니다. 슬프게도, 유일한 방법은 정말 배치 파일에 대한 작업 종료 코드는 배치 파일

+0

우수, 귀하의 제안을 시도하고 두 컴퓨터에서 동일하게 작동합니다. – paraquat

3

앤더스의 예에 대한 문제의 마지막 선으로 @%COMSPEC% /C exit 1을 사용하는 것입니다 그것은 .bat 파일을 사용한다는 것입니다 설정합니다. .cmd 파일을 사용하면 exit가 문서화 된대로 작동합니다.

.bat 및 .cmd 파일의 주 요점은 이전 버전과의 호환성입니다. 즉, .bat 파일을 실행하는 경우 cmd는 이전의 NT CLI 인 command.com을 에뮬레이션하려고 시도하는데 훨씬 간단한 오류 처리 .

적어도 내 추측입니다. 내가 찾지 못하는 .bat/.cmd 문서의 공식 문서를 검색하면서이 스레드를 발견했다.

관련 문제