n-Archives.net

Robocopy /MON /MOT を使ってフォルダ更新を監視する

目次

フォルダの更新を監視・モニタするRobocopyのしくみ

Robocopyには、コピー元フォルダの更新を常に監視し、更新が行われたらコピー処理を実行する、という監視機能(モニタリング機能)があります。この機能を利用すると、継続的にフォルダ間を同期させておくことができるようになり便利です。

この監視モニタ機能を使うには /MON、/MOT オプションを使用します。

/MON /MOT オプション説明
オプション 説明
/MON:n コピー元を監視し、n 回以上の変更があった場合に再度実行します。(デフォルトn=1)
/MOT:m コピー元を監視し、m 分後に変更があった場合に再度実行します。(デフォルトm=1)

この2つのオプションはセットで機能します。いずれかのオプションが指定されるとモニタリング機能が有効になり、以下の動作を行います。

 

モニタリング機能の処理の流れ:

  1. Robocopy起動後、最初のコピー処理を実行します。
  2. コピー処理実行後、コピー元フォルダの更新を監視するモードに入ります。
  3. 前回コピー処理後 m分以上経過し、かつ、コピー元フォルダ配下に n回以上の更新があった場合コピー処理を再度実行します。
    (この条件の確認はコピー実行後1分おきにチェックされます。)
  4. 上記 2, 3 を永遠に繰り返します。そのため、ユーザが手動で停止しなければ Robocopyは終了しません。

 

ともかく、監視機能で2つのフォルダを同期状態にしておきたい、という場合は、/MOT:1 オプションを付けて実行すれば大丈夫です。

robocopy d:\src e:\dest /MIR /MOT:1 

MOTのパラメータ 1 は、コピー処理の間隔を最低1分以上あけることを意味しています。環境に応じて、適切な数値を設定してください。

監視を終了する場合、Ctrl-C などで終了します。

 

もう少し詳細な設定を行う場合、例えば、以下のようなコマンドを実行した場合、

robocopy d:\src e:\dest /MON:3 /MOT:3 

前回コピー処理実行後、3分以上経過し、かつ、更新回数が3回以上となった場合コピー処理を実行します。

実行タイミングの例は以下のようになります。

 

 

robocopyの内部処理としては、条件チェックを1分間隔で行いますので、コピー実施も1分間隔のタイミングになります。

 

パラメータ設定方法

/MON /MOT いずれかのオプションが指定されると、モニタリング機能が有効になります。どちらかが指定されなかった場合、指定されなかったオプションのパラメータ値は 1 となります。/MON, /MOT オプションは、パラメータに1以上の数字を必ず指定する必要があります。

オプション指定例は以下の通りです。

/MON /MOT 指定例
コマンド例 意味
robocopy \src \dest /MIR /MON:3 /MOT:3
3分以上経過し、かつ、更新回数が3回以上となった場合コピー処理を実行する。
robocopy \src \dest /MIR /MON:5
1分以上経過し、かつ、更新回数が5回以上となった場合コピー処理を実行する。
robocopy \src \dest /MIR /MOT:10
10分以上経過し、かつ、更新が(1回以上)あった場合コピー処理を実行する。

2つのフォルダを同期させておく場合、1つでもファイルに更新があれば同期しておくべきかと思いますので、/MONのパラメータはデフォルトの1で良いのではないかと思います。(/MON オプションの更新回数の設定が必要なケースがあるのかよくわかりません。)ですので、通常は、監視モニタリング機能を有効にする場合、 /MOT オプションでコピー処理の最低間隔を指定するだけでよいのではないでしょうか。

また、コピー方法のオプションは /MIR である必要はなく、目的に応じたオプションを指定してください。

 

/MON で指定する更新回数の考え方

/MON で指定する更新回数は、コピー元フォルダ配下のファイル・フォルダの更新回数のことです。ファイルやフォルダの作成や削除も含まれます。

おそらく実装上の都合だと思いますが、以下のような点に注意が必要です。

 

同じファイルを複数回更新してもカウントされる

個人的にはちょっと意外に感じましたが、同じファイルを複数回更新した場合もカウントされます。例えば、/MON:3 を指定していた場合、3つの異なるファイルをそれぞれ更新した場合にも条件を満たしますが、1つのファイルを3回更新した場合も条件を満たします。ファイルの更新回数は、更新イベントを拾って実際にファイル更新が発生したタイミングでリアルタイムにカウントしているようです。

 

コピー元フォルダ配下全ての更新がカウントされる

また、更新回数のカウントは、「コピー元フォルダ配下の全てのファイル・フォルダの更新」がカウントされます。つまり、コピー対象以外のファイルを更新してもカウントされますので、注意してください。

例えば、以下のようなケースです。これらの場合、更新回数としてはカウントされますが、実際のコピー処理は行われません。

  • ファイル指定したファイル以外を更新してもカウントされる。
    例えば、*.txt だけをコピーの対象にしていても、その他のファイル(例えば、*.html など)を更新してもカウントされます。
  • /XF, /XD などのオプションで除外されているファイル・フォルダの更新もカウントされます。
  • /MIR, /S, /E などのサブフォルダ配下もコピーするオプションを指定していない場合でも、サブフォルダ配下のファイル・フォルダを更新するとカウントされます。
  • /PURGE または /MIR が指定されていない場合でも、ファイル・フォルダが削除されてもカウントされます。

 

アプリケーションによって更新回数が多くなることがある

アプリケーションを使って「ファイルを編集して保存する」だけの作業をした場合、通常1回の更新となりますが、アプリケーションによっては内部的に複数回に分けて保存処理を行っているケースがあるようです。この場合、更新回数は複数回としてカウントされますので注意してください。

 

コマンドプロンプトで実行する

それでは実際にどのように robocopyの監視機能を実行するか、まずは、コマンドプロンプトから実行する方法について説明してみたいと思います。

今回は、/MOT:1 /MON:5 として実行してみます。コマンドプロンプトから robocopy コマンドを入力すると、

コピー処理の後、

「モニター: 1 分待機、5 の変更...」

というメッセージが表示されています。それぞれ、/MOT, /MON のパラメータの値です。

また最後の行に、

「2 分: 3 の変更。」

と表示されていますが、日本語がやはり変です。これは、「これまでに2分経過し、3回の更新が行われた」ことを示しています。この状態表示は1分ごとに更新されます。

この状態で、コピー元フォルダのファイルを5回更新してみると、

次のタイミングで、更新回数が5回となり、コピー処理が実行されます。上図では、「9分: 5の変更。」と表示されているのがわかると思います。

そして、計5回更新された document-1.txt のコピーが実行されているのがわかります。

コピー処理後、経過分、更新回数の状態表示が0にリセットされます。

robocopy の監視を終了させるには、Ctrl-C を入力して終了させます。

 

RoboSyncで実行する

RobocopyをGUIで実行するのであれば、RoboSyncが便利です。RoboSyncを使ったフォルダ監視モニタリング機能の実行方法をご紹介します。

 

まず、新しいコピー項目を作成し、オプション欄に /MON /MOT オプションを記入します。

コピー項目が作成できたら、メイン画面の該当コピー項目を右クリックし、「実行」を選択してください。

すると、Robocopyが実行開始され、監視モードになります。

そして、ファイルを更新し、Robocopyがコピー処理を実行するところは、コマンドプロンプト同じですので、省略します。

お気を付けいただきたいのは、RoboSync では、コマンドプロンプトで実行したときに表示された「2 分: 3 の変更。」という状態表示が表示されません。これはRoboSyncの現在の仕様で、コンソール画面を正しく表示するため、Robocopyの進捗状態表示を表示しないようにしているためです。(もし、どうしても表示したいという場合は、RoboSyncの設定画面から「コンソール画面を加工しない」をチェックしてください。)

なお、Robocopy実行中は、RoboSync側の操作は基本的にできません。

最後に、Robocopyの監視モードを終了させる場合には、コンソール画面右上の赤い丸四角ボタンをクリックすると、Robocopyが強制終了され、RoboSyncも通常通り操作できるようになります。

 

まとめ

Robocopyの監視機能、モニタリング機能の使い方、注意点についてご紹介しました。フォルダ間のミラーリングを行い、常時同期状態を保ちたい場合に非常に有効です。通常はあまり使わない機能かもしれませんが、分単位でフォルダをバックアップしたい時などに役に立つかもしれません。是非お試しください。

 



Related Articles

 

この記事へのコメント

管理者   2021-04-24 12:35:31
たろうさん、回答遅くなりすみません。確かにその点、気になりますね。
監視機能は、
①Robocopy起動 → ②起動直後の初回コピー → ③監視モードに入る
という流れで進みますが、②の初回コピーを行っている間にコピー元フォルダに変更を行った際、
その変更の回数が ③の監視開始時に反映するか、
というご質問ですね。

で、試してみたところ、
「初期の同期中に行われた変更は監視に入る際にはカウントされない」
という結果となりました。

ですので、②の初回コピー時にいくら変更をかけても、
③監視開始時点で変更回数0で監視が始まるということになりますね。
あまりこの点が問題になることないのかもしれませんが、
そのような仕様として理解しておく必要があるかもしれませんね。

たろう   2021-04-14 18:13:20
すみません、監視モードを指定した際、初期の同期チェックを行ってから監視に入ると思うのですが、その初期の同期チェック中に変更があったファイルの挙動はどうなるのでしょうか?

コメントをお送りください
お名前:
コメント:
コメントの公開:



管理者より個人的に返信をご希望の方は、コメント中に必ずメールアドレスを記載してください。記載がないと返信できませんのでご注意ください。

If you want personal response from the author, please do not forget to write your email address in the comment. Otherwise, the author can not reply.

投稿されたコメントは手動で処理されるため、記事として登録されるまで1日程度かかります。

Submitted comments will be processed manually. So, please understand it will take about a day to publish your comment.