1. ホーム
  2. windows

[解決済み] バッチファイルを終了させるためのベストプラクティス?[クローズド]

2022-03-10 07:39:30

質問

バッチファイルで、様々な条件をチェックし、ヘルプメッセージを表示したい

メッセージを表示した後、バッチファイルを終了させるには、どれが一番良い方法ですか?

if "%1"=="/?"(
  echo "help message"
  exit /b 0
)
[more code]

または

if "%1"=="/?"(
  echo "help message"
  goto :EOF
)
[more code]
:EOF

素人目には前者の方が良いように思えますが、ネット上の多くの例では、このように GOTO タグ方式

これに対して、SOコミュニティはどのような意見をお持ちですか?

解決方法は?

個人的には exit .

  • 通常の exit コマンドは単に現在のスクリプトとその親を終了させます (例えば、コマンドラインからスクリプトを実行したり、他のバッチファイルから呼び出したりした場合)。

  • exit /b は、現在のスクリプトを終了させるために使われますが、親ウィンドウ/スクリプト/呼び出しラベルは開いたままです。

  • exitでは、終了時のエラーレベルを追加することもできます。例えば exit /b 1 を生成します。 %errorlevel% を1としています。 例

@echo off
call :getError     rem Calling the :getError label
echo Errorlevel: %errorlevel%     rem Echoing the errorlevel returned by :getError
 pause

:getError
exit /b 1    rem exiting the call and setting the %errorlevel% to 1 

印刷されるでしょう。

Errorlevel: 1
press any key to continue...

この方法でエラーレベルを設定すると、失敗する可能性のあるバッチスクリプトを作成するときに便利です。このメソッドを使って :labels を、それぞれ異なるエラーに対応させ、固有のエラーレベルを返すようにします。

<ブロッククオート
  • goto :eof は現在のスクリプト(呼び出し)を終了させますが、親ファイルは終了させません(同じように exit /b )
  • exitとは異なり、exiting errorlevelを設定することができます。 goto :eof は、現在設定されているエラーレベルを自動的に設定するため、問題を特定することが難しくなります。

また、この2つは同じバッチファイルの中で一体となって使用することもできます。

@echo off
call :getError
echo %errorlevel%
pause
goto :eof

:getError 
exit /b 2

バッチスクリプトを終了させる別の方法として cmd /k 単体のバッチファイルで使用する場合。 cmd /k を実行すると、通常のコマンドプロンプトに戻ります。

全体として、私は exit エラーレベルを設定できるという理由だけで、実際にはあなた次第です。