treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

バッチファイル内でバッチファイルの連続実行をテストしてみる

VBSの<VBSを使って画面非表示でバッチファイルを連続実行してみる - treedown’s Report>の置き換え版をバッチファイルで作ってみる、テストの記録です。

今回はバッチファイル内で別のバッチファイルを呼び出して連続実行をテストしてみるためサンプルを作成してみました。

テストバッチ作成

今回はテストのため、テスト用フォルダ内にサンプルバッチファイルを作成して動作を確認しました。

以下のようにファイルを作成しています。

各ファイルについて、内容を記載していきます。

フォルダの存在確認+バッチファイルの連続実行を以前のVBSで実現していましたが、これをバッチファイルに置き換えてみたのが、次のファイルautoupdate-test.batです。

--------------------------------------------------------------
サンプル本体:autoupdate-test.bat
--------------------------------------------------------------
@echo off
set CHKFLDRPATH=\\FileSVR\ShareF

rem フォルダのアクセス可否を確認
if not exist "%CHKFLDRPATH%"  goto NotFolderPath
     rem フォルダアクセス可能な時の処理
     rem echo フォルダにアクセス可能です。
     rem echo 確認フォルダは "%CHKFLDRPATH%" です。
     CALL "C:\Users\user-1\Works\BAT-TEST\AutoUpdate\ex-test1.bat"
     CALL "C:\Users\user-1\Works\BAT-TEST\AutoUpdate\ex-test2.bat"
     CALL "C:\Users\user-1\Works\BAT-TEST\AutoUpdate\ex-test3.bat"
     CALL "C:\Users\user-1\Works\BAT-TEST\AutoUpdate\ex-test4.bat"
     CALL "C:\Users\user-1\Works\BAT-TEST\AutoUpdate\ex-test5.bat"
goto end

:NotFolderPath
     rem フォルダが存在しない場合の処理:何もせずに終了
     rem echo フォルダにはアクセスできません
     rem echo 確認フォルダ"%CHKFLDRPATH%"へアクセスできません。

:end
echo .
echo 処理を終了します。
pause

set CHKFLDRPATH=
--------------------------------------------------------------

「if not exist "%CHKFLDRPATH%"」で変数%CHKFLDRPATH%に代入したフォルダ名へのアクセス確認を実行し、アクセスできる場合には次の行以降を実行、アクセス出来ない場合には「goto NotFolderPath」を実行し、処理を飛ばしています。

IF文判定後のコマンド実行箇所に記載した「goto NotFolderPath」は、結果として何もせずに終了をしているため、「goto end」としてNotFolderPathラベル内の処理はカットしても正常動作はします。
なお、その他もrem文は基本的に不要なので削除可能です。

フォルダ存在確認をしたあと、フォルダが存在している時に限ってバッチファイルを連続実行していく、という処理です。

サンプル内のCALLで呼び出すバッチファイル

次が実際にCALL行で呼び出される子処理のバッチファイルです。

--------------------------------------------------------------
ex-test1.bat
--------------------------------------------------------------
@echo off

echo .
echo 処理1-テスト
echo .
timeout /T 10

:end
--------------------------------------------------------------
--------------------------------------------------------------
ex-test2.bat
--------------------------------------------------------------
@echo off

echo .
echo 処理2-テスト
echo .
timeout /T 10

:end
--------------------------------------------------------------
こういう感じで、連番で架空の処理が実行される処理を確認していくことにしました。
単純に、バッチファイルが実行されたことを確認するため、画面上にecho表示しているだけの単純な処理を記載しています。

今回は同じ内容のファイルをex-test1.bat~ex-test5.batまで作成しました。

実行結果

バッチファイルが実行されると、共有フォルダにアクセス可能かどうかを判定し、アクセス可能であれば処理1からバッチファイルが実行されていきます。

バッチファイル内に「timeout /T 10」の処理を入れたので、一行のCALL文=バッチファイル×1実行の際に10秒のカウントダウンが走ります。(擬似的な処理中の時間)

次々と処理が進んで行き、最終的に

このように処理が終了して、最後のpause行が効いて、画面が入力待ち状態になります。※本番でpause行は外しますがここでは分かりやすくするために入れておきました。

本番環境では…

今回は動作確認のためのサンプル/テストのバッチファイルなのでダブルクリックで動作確認をしましたが、本番用のバッチファイルを編集した際にはこれをタスクスケジューラで設定することになります。

まだ本番環境で試していないので、試行後改めて記事にしようとおもいます。