Почему cmd.exe имеет другое errorlevel поведение на 64-разрядной машине?

Если я делаю сценарий пакетной обработки под названием 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 информацию из сценариев пакетной обработки. В этой точке я не могу найти любое рациональное объяснение этого различия.

5
задан paraquat 17 December 2009 в 20:49
поделиться

1 ответ

Вы должны быть осторожны с exit / b, так как на самом деле он не во всех случаях работает правильно. Например:

temp.bat && echo 0 || echo 1

Если temp.bat содержит exit / b 1, вы ожидаете, что будет напечатано 1, но это не так. К сожалению, единственный способ действительно установить рабочий код выхода для командного файла - использовать @% COMSPEC% / C exit 1 в качестве последней строки в командном файле

7
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: