【Windows bat】特定のファイルが更新されたことを監視するバッチ

特定のファイルが更新されたかどうかを監視するバッチファイルのサンプルを作りました。

使用するファイル

本サンプルでは、C:\Cmd直下に使用するファイルを作成しています。

  • file-update.bat
  • check.txt

特定のファイルが更新されたことを監視するバッチ

紹介するバッチの動作

本記事で紹介するバッチは、下記のような動作をします。

1. バッチ起動

バッチが起動されると、ファイルが更新されるまで、1秒ごとに”file is not updated…”の文字が出力されます。

2. ファイル更新時

check.txtファイルが更新されると…

“file is updated!!!”が出力されて、バッチが終了します。

 

メモ

上記の図では、バッチを起動するときにコマンドプロンプトではなく、Visual Studio Codeを使用しています。

Visual Studio Codeだけで、ソースコードの修正とバッチの実行、両方できるのでとても便利です。

興味のある方は下記記事からインストールしてみてください。

関連記事【Windows10】Visual Studio Codeインストール方法

バッチのソースコード

バッチファイルのソースコードは下記になります。

メモ

下記では、“C:\Cmd\check.txt”を監視するファイルとしていますので、各々変更してください。

file-update.bat

copy

@echo off

for %%i in (C:\Cmd\check.txt) do set x=%%~ti

:RECHECK
for %%j in (C:\Cmd\check.txt) do set y=%%~tj

if "%x%"=="%y%" (
    timeout /t 1 > nul
    echo file is not updated...
    GOTO RECHECK
)

echo file is updated!!!

 

ソースコードを少し説明

  • xとyにバッチ起動直後のファイルの更新日時を取得
  • ファイル未更新(x=y)の場合には、GOTOを使用して1秒後にyを再度取得
  • ファイルが更新(x!=y)されたら処理終了

 

ソースの内容をさらに詳しく知りたい方は、以下の記事も参照してください。

もう少し改良したバッチ

このままだと、下記の場合にバッチがずっと動き続けてしまう問題があります。

問題
  1. check.txtファイルが存在しない場合
  2. check.txtファイルが更新されない場合

この2つの問題を改善するソースコードを紹介します。

改良したバッチの動作

改良したバッチは下記のような動作をします。

1. ファイルが存在しない場合

バッチを起動すると“file is not existed”が表示され、バッチが終了します。

2. ファイルが更新されない場合に中断する

“file-update.bat”バッチを起動します。

別のバッチ“stop-file-update.bat”を起動します。

“file-update.bat is stopped”と表示されて、”file-update.bat”バッチが終了します。

改良したソースコード

上で作成したファイルの更新と、新しくファイルを追加します。

追加するファイル

C:\Cmd直下にファイルを追加します。

  • stop-file-update.bat

改良した“file-update.bat”ファイルのソースコードはこちら。

file-update.bat

copy

@echo off

if not exist C:\Cmd\check.txt (
    echo file is not existed
    exit /B 0
)

for %%i in (C:\Cmd\check.txt) do set x=%%~ti

:RECHECK
for %%j in (C:\Cmd\check.txt) do set y=%%~tj

if "%x%"=="%y%" (

    if exist C:\Cmd\stop-bat.txt (
        echo file-update.bat is stopped
        exit /B 0
    )

    timeout /t 1 > nul
    echo file is not updated...
    GOTO RECHECK
)

echo file is updated!!!

新しく追加する“stop-file-update.bat”ファイルのソースコードはこちらです。

stop-file-update.bat

copy

@echo off

copy nul C:\Cmd\stop-bat.txt > nul

timeout /t 5 > nul

del C:\Cmd\stop-bat.txt > nul

 

ソースコードを少し説明

  • If exist“でファイルの存在チェック
  • 別のバッチでcheck.txtファイルを作成して、存在した場合には”exit /B 0“でバッチを終了する

 

ソースの内容をさらに詳しく知りたい方は、以下の記事も参照してください。