5

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 オプションを検索しましたが、バッチ スクリプトからエラーレベル情報を伝達する方法を制御するオプションを見つけることができませんでした。現時点では、この違いについて合理的な説明を見つけることができません。

4

2 に答える 2

8

exit /b は実際にはすべてのインスタンスで正しく機能するとは限らないため、注意が必要です。例えば:

temp.bat&&echo 0||echo 1

temp.bat に exit /b 1 が含まれている場合、1 が出力されると予想されますが、そうではありません。悲しいことに、バッチ ファイルに有効な終了コードを実際に設定する唯一の方法は、バッチ ファイルの最後の@%COMSPEC% /C exit 1として使用することです。

于 2009-12-19T00:52:47.740 に答える
3

Anders の例の問題点は、.bat ファイルを使用していることです。.cmd ファイルを使用する場合、exit は説明どおりに機能します。

.bat ファイルと .cmd ファイルの両方を持つ主なポイントは、下位互換性があるようです。.bat ファイルを実行している場合、cmd は NT 以前の CLI である command.com をエミュレートしようとします。

少なくともそれは私の推測です。見つけられないように見える.bat/.cmdに関する公式ドキュメントをグーグルで検索しているときに、このスレッドに出くわしました。

于 2010-07-27T17:15:08.960 に答える