条件分岐(4)
MS-DOS上で動作するプログラムは、ほとんどの場合、プログラムが終了したときにMS-DOSに大して「終了コード(エラーレベル)」という0〜255までの数値を返します。
この数値は、プログラムがOSに大して返すメッセージの役割があり、たとえば「このプログラムは正常に終了しました」とか、「エラーが発生しました」などの情報を、OSに知らせています。
この数値は、OS内の記憶域に保存されており、これをバッチファイルの中で参照することができます。
たとえばここに、メモリの空き容量が100KB以上あれば終了コードに「0」を、もしそれ以下ならば「1」を返すという単純なプログラムが存在したとします。
これを利用して、まず最初にメモリの空き容量をチェックして、もし空き容量が十分だったらワープロソフトを立ち上げるといったことができます。具体的にはバッチファイルの中でこのプログラムを実行し、終了コードが1であればエラーメッセージを出した後、バッチファイルを終了させ、0であればワープロソフトを実行するといったやり方です。
直前に十実行したプログラムの終了コードを参照して処理を行うには以下のように記述します。
IF ERRORLEVEL 終了コード 処理
ここで注意して頂きたいことは、バッチファイルの中で終了コードによって処理を行う場合には、終了コードがバッチファイルの中で記述した終了コードよりも大きいならばという意味になるということです。
たとえば、バッチファイルの中で
IF ERRORLEVEL 1 ECHO テストです。
と書くと、終了コードが1以上の時に「テストです」と画面に表示されます。
それでは具体的に作ってみることにしましょう。ここでは、メモリをチェックするプログラムの実行ファイル名を仮に「MEMCHK.EXE」とし、ワープロソフトの実行ファイル名を「JSW.EXE」とします。
REM File Name ERRORLEVEL1.BAT
@ECHO OFF
MEMCHK
IF ERRORLEVEL 1 ECHO メモリが足りないためこのプログラムを実行できません。
IF ERRORLEVEL 1 GOTO END
JSW
:END
上記のバッチファイルの中では、「IF ERRORLEVEL 1」と記述していますから、このプログラムが「0」を返してくれば、0は1以下ですので引っかからずに「JSW」の行まで進むことができます。
反対に「1」を返してきた場合には、エラーメッセージを出す部分で条件指定に引っかかりますので、エラーメッセージを表示します。さらに、次の行の「GOTO END」の行の条件にも引っかかりますので、バッチファイルの最後まで処理が飛んで、ワープロソフトは実行されないことになります。
エラーレベルで目入選択をしよう
さて、このエラーレベル、本来はプログラムのエラーなどの状態をOSに知らせるために存在するものらしいのですが、利用の仕方によっては、バッチファイルの中でメニュー選択を可能にしたり、システムの状態を検査して、処理を分岐することができます。
通常プログラムは、実行結果を画面やファイルに出力しますが、実行結果をエラーレベルに出力するプログラムがあれば、これを行うことができます。
実行結果をエラーレベルに出力するプログラムには、昔からMS-DOSユーザーの間で多く利用されている「BU」というものがあります。
このソフトは、たとえば、指定したドライブにディスクが入っているかどうか、指定した計算の答え、押されたキーのキーコード、入力された文字数などをエラーレベルや環境変数に返すソフトです。こちらのページからダウンロードすることができます。もちろんフリーソフトです。
しかし、いきなりこれを使うのは難しいですので、今回はもっと簡単な、TomG作成のプログラム、バックエラーレベルというのを使ってみたいと思います。
(BUそんなに難しくないのにな亜。おまえ、自分の作ったソフト使ってみたいだけじゃないの?というようなご指摘にはお答えしかねますのであしからず)
バックエラーレベルは、ここからダウンロードしてください。
このプログラムは、テンキーから入力された数字をエラーレベルとして返します。使い方はとっても簡単です。プログラムの中に「bkerr」と書き加えると、そこでキー入力待ちの状態になります。
それでは早速作ってみましょう。
REM File Name MENU1.BAT
ECHO 起動メニューです。
ECHO 以下から選択してください。
ECHO.
ECHO 1.ディレクトリの表示。
ECHO.
ECHO 2.これはテストですと表示する。
ECHO.
ECHO 3.終了する。
ECHO.
:INPUT
ECHO 番号を入力してください。
BKERR
IF ERRORLEVEL 4 GOTO ERROR
IF ERRORLEVEL 3 GOTO END
IF ERRORLEVEL 2 ECHO これはテストです
IF ERRORLEVEL 2 GOTO END
IF ERRORLEVEL 1 DIR
IF ERRORLEVEL 1 GOTO END
IF ERRORLEVEL 0 GOTO ERROR
:ERROR
ECHO 番号が正しくありません。
GOTO INPUT
:END
ECHO 終了しました。
このバッチファイルでは、まず最初にメニューを表示して、ユーザーに番号の入力を求め、何が入力されたかをエラーレベルを元に判断しています。
そして、入力番号が最後のメニュー「3」の一つ大きな数字「4」よりも大きければエラーを出力して再度キー入力を求める処理を記述してあります。
次に、入力番号に応じた処理が記述されており、最後に「0」を押されたときのためのエラー処理を記述しています。
今回のエラーレベルの話はいかがでしたでしょうか?子のエラーレベルが使えると、バッチファイルの中でいろいろなプログラムを上手に利用できるようになりますので、是非覚えてくださいね。
次へ
バッチファイル講座の目次に戻る
MS-DOSの部屋に戻る
トップページに戻る