Windowsでファイルをバックアップするには、2つのフォルダの内容を同期させるrobocopyコマンドが便利だ。robocopyではフォルダの同期機能をはじめ、さまざまなオプションを指定してのコピーができる。2つのフォルダの内容を完全に同期させるには/mirオプションを利用する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 8.1/Windows 10、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016
2つのフォルダの内容を同期させ、ファイルやフォルダの内容を同じ状態に保つ機能は、ファイルサーバのバックアップや個人的なデータのバックアップ、リモートオフィス同士でのデータの同期など、システム管理のさまざまな場面で利用される。
このような用途に利用できるコマンドとして、Windows OSにはcopyやxcopyコマンドが標準装備されている。
フォルダの同期に利用できる標準装備のツールとしては、この他にも「robocopy.exe」というコマンドラインツールがある。
robocopyは、もともとはリモートのファイルサーバ同士でファイルやフォルダ、ユーザープロファイルデータなどを同期させるために作られたコマンドである。その名前は「Robust File Copy」の略であり、堅固(robust)で確実なファイルコピーという意味を持つ。具体的な機能の例を以下に記す。
このようにrobocopyは多くの機能を備えている。本Tech TIPSではrobocopyの基本的な使い方として、2つのフォルダを同期させる機能と、ログや設定を保存する機能について解説する。それ以外の機能については次の記事を参照していただきたい。
robocopyコマンドの使い方やオプションは、コマンドプロンプトで「robocopy /?」を実行すると表示される。
robocopyでは、copyやxcopyコマンドのように、引数としてコピー元とコピー先、オプションなどを指定する。
コピー元もコピー先もフォルダであり、その間で、その中にあるファイルがコピーされる(コピーするファイルを特定する方法は後述)。コピー先として指定されているフォルダが存在しない場合は、フォルダが新規作成され、その中へコピーされる。またコピー元/コピー先ともにワイルドカードは指定できず、明確に特定のフォルダ名を指定する必要がある。
コピー元やコピー先には、「c:\src_folder」といったローカルのフォルダの他、例えば「\\server1\drive_c\dest_folder」のようにUNCによるリモートのサーバ上の共有フォルダも指定できる。
ただしデフォルトではサブフォルダはコピーされず、さらに次の種類のファイルだけが上書きでコピーされる。
どのような種類のファイルをコピーするかは、ファイルの「クラス」に基づいて決まる。クラスとは例えば、日付が新しいか古いか、サイズが異なるか、属性が異なるか、などの状態のことを指す。どのクラスに該当するファイルをコピーするかはオプションで指定できる。詳細なオプションについては、Tech TIPS「Windowsのrobocopyコマンドでコピーするファイルの種類を選択/変更する」を参照していただきたい。
実際に利用する例を次に示す。
上記画面の「コピーの結果」のうち、「コピー済み」列が実際にコピーした数、「スキップ」列がコピーされなかった数である。
robocopyをオプション指定なしで実行すると、デフォルトでは「*.*」、つまり全てのファイルがコピーの対象となる。オプションとしてファイルのパターンを指定すると、そのパターンに合うファイルのみがコピーの対象となる。例えばJPG/JPEG画像ファイルだけをコピーするには、次のようにワイルドカード指定を追加する(パターンは複数指定可能)。
※2つのフォルダ間でJPG/JPEGファイルだけをコピーする例
robocopy c:\src_folder d:\dest_folder *.jpg *.jpeg
robocopyに何もオプションを付けないと、指定されたフォルダ中にあるファイルだけがコピーの対象となる。これをサブフォルダも含めて全部コピー(上書き更新)するには「/s」オプションを付ける。ただし/sだけでは、空のフォルダはコピーされない。空フォルダも含めてサブフォルダをコピーするには「/e」(/s /eでも同じ)を付けて実行する。これらのオプション名はxcopyコマンドと同じである。
実行すると次のようになる。
/sオプションを使うと、コピー元のファイルやサブフォルダがコピー先へ上書き更新される。だが、この場合、もしコピー先に余分なファイル(コピー元にはないファイル)があっても、そのファイルは何もされずに(削除されずに)、そのまま残ることになる。
この挙動を変更して、2つのフォルダの内容をサブフォルダも含めて完全に同期させる(同じ状態にする)には、「/mir」(ミラー)オプションを指定する。
/mirオプションを付けると、コピー元フォルダと同じ状態になるように、コピー先フォルダへファイルがコピーされる。コピー先に不足するものがあれば新規作成されるし、日付やサイズが相違するファイルがあれば上書き更新される。さらに、コピー先に余分なファイルやフォルダがあれば、それらは削除される。
また/mirオプションでは、サブフォルダの内容もコピーされる。そのため/mirを付けた場合、/sや/eオプションは不要だ。実際には、サブフォルダをコピーする/sと、余分なファイルを削除する「/purge」オプションを組み合わせたものが/mirオプションといえる。
/sや/eだけでは、同じコピー先に対して何度もコピーすると、コピー先に不要なファイル(=コピー元にすでに存在しないファイル)がどんどん増えていく可能性がある。だが/mirオプションを付ければ、それを抑止できる。robocopyを単なるバックアップ用途で利用するなら、このオプションが便利だろう。
実行すると次のようになる。
最新ではないWindows OSで/mirオプション(もしくは/purgeオプション)を使う場合、2つのドライブ全体をコピーさせるなら注意が必要である。例えばG:ドライブの内容を全てH:ドライブにコピーするなら、次のようなコマンドを実行するだろう(/zもしくは/zbオプションは、ユーザーのアクセス権がないファイルもバックアップするためのオプション)。
※問題のあるドライブ間コピーのコマンド
robocopy g:\ h:\ /mir /zb
これを実行すると、H:のルートにある「\System Volume Information」というフォルダの内容をいったん削除してG:\からコピーしてきたファイルで上書きしようとする。だがこのフォルダには、各ボリュームの重要なメタデータ(ボリュームシャドウコピーや復元、重複除去機能などのデータ)が保存されているので、これを削除・上書きすると、ファイルシステム上のデータが壊れるなどの障害が発生することがある。
これを避けるには、ドライブのルートをミラーコピーする際、System Volume Informationフォルダを除外するように/xdオプションも指定する。
※正しいドライブ間コピーのコマンド
robocopy g:\ h:\ /mir /zb /xd "System Volume Information"
なお、Windows 10バージョン20H2で確認したところ、ルートフォルダに対して/mirや/purgeオプションを指定すると、自動的にSystem Volume Informationフォルダがコピー対象から除外される。つまり上記のように/xdオプションを指定して除外する必要はなくなった。しかし古いWindows OSでは、引き続き/xdオプションで除外するように注意すべきだろう。
以上の例のように、robocopyを実行すると、デフォルトではコピーしているファイルの状況や転送量、何個のファイルをコピーしたかなど、詳細なコピーの状況が画面に表示される。
こうしたコピー状況のログはファイルなどに残すこともできるので、タスクスケジューラに登録して自動実行する場合でも、後で実行状況を確認でき、便利である。ログをファイルに残すには「/log」オプションを指定する。
/log以外にも、幾つかのログオプションが利用できる。
オプション名 | 意味 |
---|---|
/log:<ファイル名> | 指定したファイルにログを書き込む。ファイルが存在する場合は、既存の内容は破棄され、新規作成される |
/log+:<ファイル名> | 指定したファイルの末尾にログを追加する |
/tee | ログファイルに出力するとともに、画面にも表示する |
主なログ出力オプション |
例えばバックアップタスクとして登録する場合のように、robocopyで何度も同じコピー作業を繰り返すつもりなら、robocopyで行う作業を「ジョブ」として用意しておくとよいだろう。
「/save」オプションを使うと、robocopy実行時に指定したフォルダやパターン指定、オプション設定などがジョブとして.RCJファイルに保存される。保存された.RCJファイルを「/job」オプションで呼び出すことにより、同じコマンドを再実行できる。
/saveオプションを付けると、その左側にある全てのパラメーターが指定した.RCJファイルに書き込まれる。.RCJファイルはテキストファイルなので、メモ帳などで開けば、オプション設定を変更できる。
なお/saveオプションだけだと、/saveによる保存後に、指定したパラメーターでrobocopyが1回実行される(コピーが行われる)。コピーさせずに.RCJファイルの作成だけを行いたい場合は、最後に「/quit」オプションを付加すること。
※ジョブの定義例
robocopy c:\src_folder d:\dest_folder /mir /save:copyjob /quit
※ジョブの実行例
robocopy /job:copyjob
コマンドラインではなくGUIのツールでフォルダをバックアップしたり同期したりしたい場合は、Richcopyが利用できる。詳細は次の記事を参照していただきたい。
■関連記事(Windows Server Insider)
■更新履歴
【2021/03/03】スクリーンショットを更新しつつ、最新の情報を反映しました。
【2017/12/04】2つのドライブ間でのミラーコピーに対する注意事項を追記しました。
【2017/11/29】Windows 10/Windows Server 2016に合わせて、内容を更新しました。
【2015/02/25】Windows 8/8.1およびWindows Server 2012/2012 R2に同梱のrobocopyコマンドの情報を反映しました。
【2011/06/24】robocopyの基本的な使い方を追記しました。またWindows 7/Windows Server 2008 R2で標準装備されたrobocopyコマンドをベースに加筆修正をしました。
【2007/04/20】初版公開(対象はWindows 2000/Windows XP/Windows Server 2003/Windows Vista)。
Copyright© Digital Advantage Corp. All Rights Reserved.