条件分岐(3)


 バッチファイルの中では、ファイルの存在を確認して、その結果によって処理を行ったり、指定のラベルに飛ばすことができます。
バッチファイルの中でファイルの存在を確認するには、

IF EXIST ファイル名 処理

と記述します。「処理」の部分にファイルが存在したときに行う処理を記述するわけです。

IF NOT EXIST ファイル名 処理

とすることで、ファイルが見つからなかったときに指定の処理を実行することもできます。
それではこれを使って、カレントディレクトリにある「TEST.TXT」というファイルを表示するバッチファイルを作成してみましょう。ファイルの内容を表示するには、MS-DOSのTYPEコマンドを利用します。

REM File Name EXIST1.BAT
@ECHO OFF
ECHO TEST.TXTの内容を表示します。
IF EXIST TEST.TXT TYPE TEST.TXT
IF NOT EXIST TEST.TXT ECHO ファイル「TEST.TXT」が見つかりません。


 ファイル名には、ワイルドカードを指定することもできます。
次のバッチファイルは、カレントディレクトリに存在するテキストファイルを、すべてCドライブのTESTディレクトリにコピーする処理を行います。


REM File Name EXIST2.BAT
@ECHO OFF
ECHO カレントディレクトリの拡張し.TXTのファイルをコピーします。
IF EXIST *.TXT COPY *.TXT C:\TEST
IF NOT EXIST *.TXT ECHO 対象ファイルがありませんでした。


 さて、このバッチファイルにはもう一工夫必要です。コピー対象のファイルが無いときには、エラーがでてくれますが、もしCドライブにTESTディレクトリが無かったときにはCOPYコマンドからエラーが来てしまいます。
そこで必要になってくるのはディレクトリの存在チェックです。
以下のように記述することで、ディレクトリの存在チェックが行えます。

IF EXIST ドライブ:\ディレクトリ名\NUL 処理

もちろん上と同じように、ディレクトリが見つからなかったときの処理もNOTを使えば記述できます。
それでは早速改良してみましょう。


REM File Name EXIST3.BAT
@ECHO OFF
ECHO カレントディレクトリの拡張し.TXTのファイルをコピーします。
IF NOT EXIST C:\TEST\NUL GOTO DIR_ERROR
IF NOT EXIST *.TXT GOTO FILE_ERROR
COPY *.TXT C:\TEST
GOTO END
:DIR_ERROR
ECHO コピー先ディレクトリが見つかりません。
GOTO END
:FILE_ERROR
ECHO 対象ファイルがありません。
:END


 こんな感じになります。
上のファイルではまず最初にエラーになる可能性のある条件(ファイルが見つからないとかコピー先のディレクトリが存在しないなど)をいち早く見つけ出して、エラー表示をする部分に処理の流れを飛ばしておいて、その上でコピー処理を実行するという作戦です。
こうしておけば安心してコピーが実行できます。

次へ

バッチファイル講座の目次に戻る

MS-DOSの部屋に戻る

トップページに戻る