Если я делаю сценарий пакетной обработки под названием temp.bat (например), содержащий:
exit /b 1
Когда я выполняю его различными способами, я получаю другое поведение в своей 32-разрядной системе XP по сравнению с 64-разрядной системой XP.
На 32-разрядном:
> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
0
На 64-разрядном:
> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
1
Я перерыл опции cmd.exe, и я не мог найти любое управление опций, как оно распространяет errorlevel информацию из сценариев пакетной обработки. В этой точке я не могу найти любое рациональное объяснение этого различия.
Вы должны быть осторожны с exit / b, так как на самом деле он не во всех случаях работает правильно. Например:
temp.bat && echo 0 || echo 1
Если temp.bat содержит exit / b 1, вы ожидаете, что будет напечатано 1, но это не так. К сожалению, единственный способ действительно установить рабочий код выхода для командного файла - использовать @% COMSPEC% / C exit 1
в качестве последней строки в командном файле