エラーでコマンドを終了する方法

BASH,bat,バッチ

今回の内容はコマンド処理でエラーが起きた場合に処理を終了する方法を紹介します。内容の流れはまずコマンド処理が成功したから失敗したかをerrorlevel変数により判別します。

コマンドの成功、失敗したerrorlevel変数の値

コマンド処理をする際、失敗した時に中止する方法を紹介します。

@echo off
type nul > ex.txt
echo %errorlevel%
echo,
type
echo %errorlevel%
echo,
aaaa
echo %errorlevel%
echo,

2行目type nul > ex.txtは「ex.txt」ファイルを作るという意味です。typeコマンドはファイルの中身を見たり、編集したりするコードです。

3、6、9行目は変数errorlevelの内容をechoコマンドによって表示します。errorlevelは特殊な変数でコマンド処理の結果を表示することができます。

4、7、10行目のecho,は改行する意味です。改行するには、「.」や「:」も使用できます。

5、8行目のtypeとaaaaはミスコードです。何も処理されません。6行目のerrorlevel変数によって、内容が表示されます。

コマンドスクリプトの結果はこちらです。それぞれのerrorlevel変数の内容が異なります。

このコマンド結果を解説します。

まずtype nul > ex.txtの結果が「0」で表れてます。これはコマンドの処理が成功しており、変数errorlevelの中に「0」が入りました。

次にtypeのみはコマンドとして失敗してますので、変数error levelには「1」が入ります。

最後にaaaaはコマンドとして成り立たないので、変数error levelには「9009」が入りました。まとめると下記のとおり

  • コマンド成功▶︎「0」
  • コマンド失敗▶︎「1」
  • コマンドなし▶︎「9009」

error level変数の成功、失敗の時の数字を図示

このコマンド成功失敗によってら変数error levelに入る数字が異なります。この数字の違いをつかつ、コマンド処理を変えます

ifを使って、コマンド失敗時に終了する

ifコマンドを使ってコマンド失敗したときに終了する例を解説します。下記のコードを「ex2.bat」という名前で用意します。

@echo off
echo 失敗例
type
if %errorlevel% neq 0 (
  echo エラー発生
  echo errorlevelは%errorlevel%
  exit /b
)

各行の解説をします。1行目の@echo offはコマンドの処理を表示させず、結果のみ表示します。2行目の「echo 失敗例」は「失敗例」を表示します。3行目のtypeはわざと間違ったコマンドを書いてあります。

4~8行目はifコマンドの内容となっています。4行目の「if %errorlevel% nep 0 (」は「もし、変数errorlevelが0でない場合~」と訳すことができます。nepは四則計算で=と反対の意味で「異なる」という意味です。前節で変数errorlevelに入る数字は解説しましたが、3行目のtypeがコマンドとして間違っているので「1」がerrorlevelに入ります。結果、4行目は「もし、[変数errorlevel=1]が0でない場合~」と訳すことができます。

5行目は「エラー発生」を表示します。6行は「errrorlevelは1」と表示します。7行目はifの内容を終了しますという意味です。

コマンドは以下のとおりです。typeが構文として間違っているので、ifコマンドの内容がしょりされて、プログラムが終了していることが分かります。

if errorlevel を使って、コマンド失敗時に終了する

if errorlevelを使い、コマンド失敗時に終了するコードを解説します。下記のコードを「ex3.bat」という名前で用意します。


@echo off
aaaa
if errorlevel 1 call :st
exit /b 
:st
echo;
echo エラー発生
echo 「errorlevel」は「%errorlevel%」です。
pause
exit

if errorlevel 9009 call :st
exit /b 

コマンドプロンプトの結果はこちら。aaaaはコマンドとしての機能はないため、13,14行目までで処理しています。

次に下記のコードを「ex4.bat」で用意します。

@echo off
type
if errorlevel 1 call :stop
exit /b 
:stop
echo;
echo エラー発生
echo 「errorlevel」は「%errorlevel%」です。
pause
exit

if errorlevel 9009 call :stop
exit /b 

コマンドスクリプトの結果はこちら。こちらは先ほどのコードとは異なり、3~10行目の内容で表示されており、コマンドが終了します。

コメント

タイトルとURLをコピーしました