なぜcmd.exeのは、64ビットマシン上の異なるエラーレベルの振る舞いを持っていますか?
-
20-09-2019 - |
質問
私はtemp.batという名前のバッチスクリプトを作成する場合は、
(たとえば)を含むます:
exit /b 1
私はさまざまな方法でそれを実行すると、私は64ビットXPシステム対私の32ビット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情報を伝播する方法を制御する任意のオプションを見つけることができませんでした。この時点で、私はこの違いのためにあらゆる合理的な説明を見つけることができませんよ。
解決
あなたはそれが実際にすべてのインスタンスでは正しく動作しませんので、終了/ Bと注意する必要があります。たとえばます:
temp.bat&&echo 0||echo 1
temp.batが終了/ B 1が含まれている場合は、1が印刷されることを期待するだろうが、そうではありません。悲しいことに、本当にバッチファイルのための作業終了コードを設定する唯一の方法は、バッチファイル内の最後のの行
として@%COMSPEC% /C exit 1
を使用することです 他のヒント
アンダースの例の問題点は、.batファイルを使用していることです。あなたは.CMDファイルを使用する場合は、出口は文書化されているように動作します。
.batファイルや.cmdのファイルの両方を持つことの主なポイントは、下位互換性のようだ:それは.batファイルを実行していた場合、cmdははるかに簡単なエラー処理を持っていた前のNT CLI、command.comを、エミュレートしようとします。
少なくともそれは私の憶測です。私は見つけることができないようの.bat / .cmdの事、上の公式ドキュメントのためにグーグルでいる間、私はこのスレッドでつまずいています。
所属していません StackOverflow