8

a.bat、b.bat、c.bat、d.bat の 4 つのバッチ ファイルがあります。これらのバッチ ファイルは、a.bat が b.bat を呼び出し、b.bat が c.call を呼び出すなどの方法で呼び出されます。

バッチ ファイルでエラーが発生した場合は、エラーが発生したと言ってプログラム全体を終了し、どのバッチ ファイルに問題があるかを示します。私の質問は、どうすればこれを行うことができますか?

ここで使用exit /bしましたが、現在のバッチ ファイルからのみ取得し、呼び出された場所からバッチ ファイルに戻ります。

コウモリ

@echo. off
echo. this is batch 'a'
call b.bat

b.バット

@echo. off
echo. this is batch 'b'
call c.bat

c.bat

@echo. off
echo. this is batch 'c'

バッチ「C」でエラーが発生しました - エラーが報告されて終了するはずですが、どういうわけかバッチ「B」に戻っています。ネストされたバッチ ファイルを終了する方法について何か考えはありますか?

4

5 に答える 5

5

構文エラーを使用できます。これにより、コマンド ウィンドウを閉じずにバッチをすぐに停止できます。

関数は、エラー メッセージを抑制するためだけに関数:HALTを呼び出します。:__halt

c.bat

@echo off
echo this is batch 'c'
echo An error occurs
call :HALT
exit /b

:HALT
call :__halt 2> nul
exit /b

:__halt
()
于 2013-07-15T13:42:00.837 に答える
2

これを試してみてください ( c.bat):

@echo. this is batch 'c'
@pause
exit
于 2013-07-15T13:38:39.773 に答える
2

ここで説明されているように、終了コードでエラーレベルを使用できます: http://www.robvanderwoude.com/errorlevel.php

特に、手動でエラーを発生させたい場合は、c.bat または b.bat に終了コードを明示的に指定する必要があります。

EXIT /b 1

(または選択した数)、ただし、Windowsの自動エラーをカウントしたいだけの場合は、b.batまたはc.batを実行した直後に、次のように書くことができます

IF ERRORLEVEL 1 EXIT /b %ERRORLEVEL%

これにより、同じエラーが次のプログラムまで伝播されるため、必要に応じてすぐに終了できます。いつでも上方への伝播を停止できるという利点があります。

(編集:明確にするために、ここで言及されているコードの2行目は、手動または自動エラーを使用しているかどうかにかかわらず、最下位レベルのプログラムを除くすべてで必要です)

于 2013-07-15T13:45:40.950 に答える
0

.BAT ファイルが TakeCommand の下にある場合は、CANCEL を使用します。

于 2015-08-02T06:37:07.067 に答える