Windowsの「robocopy」コマンドでフォルダをバックアップ/同期させる:Tech TIPS
Windowsでファイルをバックアップするには、2つのフォルダの内容を同期させるrobocopyコマンドが便利だ。robocopyではフォルダの同期機能をはじめ、さまざまなオプションを指定してのコピーができる。2つのフォルダの内容を完全に同期させるには/mirオプションを利用する。
対象OS:Windows 8.1/Windows 10、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016
robocopyコマンドとは
2つのフォルダの内容を同期させ、ファイルやフォルダの内容を同じ状態に保つ機能は、ファイルサーバのバックアップや個人的なデータのバックアップ、リモートオフィス同士でのデータの同期など、システム管理のさまざまな場面で利用される。
このような用途に利用できるコマンドとして、Windows OSにはcopyやxcopyコマンドが標準装備されている。
フォルダの同期に利用できる標準装備のツールとしては、この他にも「robocopy.exe」というコマンドラインツールがある。
robocopyは、もともとはリモートのファイルサーバ同士でファイルやフォルダ、ユーザープロファイルデータなどを同期させるために作られたコマンドである。その名前は「Robust File Copy」の略であり、堅固(robust)で確実なファイルコピーという意味を持つ。具体的な機能の例を以下に記す。
- エラー時の再試行回数の制限や待ち時間の指定
- ネットワーク切断時のコピーの中断と再開
- 属性やセキュリティ設定のコピー
- ファイルサイズや変更時刻などを限定してのコピー
- コピー先にある余分なファイルの削除
- 256文字を超える長いパス名の処理
- 動作ログの記録
- 作業内容やオプション設定などの保存と再実行(ジョブ機能)
このようにrobocopyは多くの機能を備えている。本Tech TIPSではrobocopyの基本的な使い方として、2つのフォルダを同期させる機能と、ログや設定を保存する機能について解説する。それ以外の機能については次の記事を参照していただきたい。
- Tech TIPS「robocopyでコピーするファイルの種類を選択/変更する」
- Tech TIPS「robocopyでコピー中断後に自動再開させる」
robocopyのヘルプを参照するには
robocopyコマンドの使い方やオプションは、コマンドプロンプトで「robocopy /?」を実行すると表示される。
robocopyの基本的な使い方
robocopyでは、copyやxcopyコマンドのように、引数としてコピー元とコピー先、オプションなどを指定する。
コピー元もコピー先もフォルダであり、その間で、その中にあるファイルがコピーされる(コピーするファイルを特定する方法は後述)。コピー先として指定されているフォルダが存在しない場合は、フォルダが新規作成され、その中へコピーされる。またコピー元/コピー先ともにワイルドカードは指定できず、明確に特定のフォルダ名を指定する必要がある。
コピー元やコピー先には、「c:\src_folder」といったローカルのフォルダの他、例えば「\\server1\drive_c\dest_folder」のようにUNCによるリモートのサーバ上の共有フォルダも指定できる。
ただしデフォルトではサブフォルダはコピーされず、さらに次の種類のファイルだけが上書きでコピーされる。
- コピー先に存在しないファイル
- 名前が同じでも、更新日付が異なるファイル(新しいファイルだけではなく、コピー元の方が古くてもコピー対象となる)
- 名前と日付が同じでも、サイズが異なるファイル
robocopyでコピーされるファイルの種類
デフォルトでは、このような条件に一致するファイルがコピーされる。オプションを指定すれば、新しいファイルだけをコピーさせたり、同じファイルでも強制上書き再コピーさせたりできる。
どのような種類のファイルをコピーするかは、ファイルの「クラス」に基づいて決まる。クラスとは例えば、日付が新しいか古いか、サイズが異なるか、属性が異なるか、などの状態のことを指す。どのクラスに該当するファイルをコピーするかはオプションで指定できる。詳細なオプションについては、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を付けるとサブフォルダもコピーされるものの、空のフォルダは除外される。空のフォルダもコピーしたい場合は、/sの代わりに/eを付ける(/s /eのように両方付けてもよい)。
実行すると次のようになる。
2つのフォルダを完全に同期させて、ミラーコピーを作る
/sオプションを使うと、コピー元のファイルやサブフォルダがコピー先へ上書き更新される。だが、この場合、もしコピー先に余分なファイル(コピー元にはないファイル)があっても、そのファイルは何もされずに(削除されずに)、そのまま残ることになる。
この挙動を変更して、2つのフォルダの内容をサブフォルダも含めて完全に同期させる(同じ状態にする)には、「/mir」(ミラー)オプションを指定する。
Copyright© Digital Advantage Corp. All Rights Reserved.