Robocopyには、コピー元フォルダの更新を常に監視し、更新が行われたらコピー処理を実行する、という監視機能(モニタリング機能)があります。この機能を利用すると、継続的にフォルダ間を同期させておくことができるようになり便利です。
この監視モニタ機能を使うには /MON、/MOT オプションを使用します。
オプション | 説明 |
---|---|
/MON:n | コピー元を監視し、n 回以上の変更があった場合に再度実行します。(デフォルトn=1) |
/MOT:m | コピー元を監視し、m 分後に変更があった場合に再度実行します。(デフォルトm=1) |
この2つのオプションはセットで機能します。いずれかのオプションが指定されるとモニタリング機能が有効になり、以下の動作を行います。
モニタリング機能の処理の流れ:
ともかく、監視機能で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以上の数字を必ず指定する必要があります。
オプション指定例は以下の通りです。
コマンド例 | 意味 |
---|---|
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:3 を指定していた場合、3つの異なるファイルをそれぞれ更新した場合にも条件を満たしますが、1つのファイルを3回更新した場合も条件を満たします。ファイルの更新回数は、更新イベントを拾って実際にファイル更新が発生したタイミングでリアルタイムにカウントしているようです。
また、更新回数のカウントは、「コピー元フォルダ配下の全てのファイル・フォルダの更新」がカウントされます。つまり、コピー対象以外のファイルを更新してもカウントされますので、注意してください。
例えば、以下のようなケースです。これらの場合、更新回数としてはカウントされますが、実際のコピー処理は行われません。
アプリケーションを使って「ファイルを編集して保存する」だけの作業をした場合、通常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 を入力して終了させます。
RobocopyをGUIで実行するのであれば、RoboSyncが便利です。RoboSyncを使ったフォルダ監視モニタリング機能の実行方法をご紹介します。
まず、新しいコピー項目を作成し、オプション欄に /MON /MOT オプションを記入します。
コピー項目が作成できたら、メイン画面の該当コピー項目を右クリックし、「実行」を選択してください。
すると、Robocopyが実行開始され、監視モードになります。
そして、ファイルを更新し、Robocopyがコピー処理を実行するところは、コマンドプロンプト同じですので、省略します。
お気を付けいただきたいのは、RoboSync では、コマンドプロンプトで実行したときに表示された「2 分: 3 の変更。」という状態表示が表示されません。これはRoboSyncの現在の仕様で、コンソール画面を正しく表示するため、Robocopyの進捗状態表示を表示しないようにしているためです。(もし、どうしても表示したいという場合は、RoboSyncの設定画面から「コンソール画面を加工しない」をチェックしてください。)
なお、Robocopy実行中は、RoboSync側の操作は基本的にできません。
最後に、Robocopyの監視モードを終了させる場合には、コンソール画面右上の赤い丸四角ボタンをクリックすると、Robocopyが強制終了され、RoboSyncも通常通り操作できるようになります。
Robocopyの監視機能、モニタリング機能の使い方、注意点についてご紹介しました。フォルダ間のミラーリングを行い、常時同期状態を保ちたい場合に非常に有効です。通常はあまり使わない機能かもしれませんが、分単位でフォルダをバックアップしたい時などに役に立つかもしれません。是非お試しください。
RoboSync: RobocopyのためのGUIツール
本サイトで公開しているツールです。ダウンロードはこのバナーをクリック!
Version 1.3.27 をリリースしました! (2021/1/1)
RobocopyをGUIから実行できるようにするツールです。コマンドプロンプトを表示することなく、GUI画面からほぼマウス操作だけで実行までできます。
Robocopyがバックグラウンドでそのまま実行されますので設定に迷うことはありません。
・ 複数のコピー項目の作成と管理。
・ スクリプトファイル(バッチファイル)出力が可能。スケジューラによるバックグラウンド処理にも使えます。
・ Robocopyによるコピー実行前に、実行プレビュー(/L)、パラメータのチェック(/QUIT)が可能。
・ Robocopyのパラメータ設定の簡易チェック、Robocopy実行前の簡易チェックを行います。
・ Robocopy実行前後で実行するスクリプトを定義可能。
・ Robocopy実行途中での中断、実行ログの履歴管理と保存が可能。
Related Articles
管理者より個人的に返信をご希望の方は、コメント中に必ずメールアドレスを記載してください。記載がないと返信できませんのでご注意ください。
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.