Windowsには「robocopy」と呼ばれるファイルコピーツールが搭載されています。
Windowsでファイルやフォルダをコピーする場合、ファイルエクスプローラーを利用するのが簡単ですが、途中でコピーが止まってしまうと、どこまでコピーしたか分からなくなってしまいます。
robocopyの「ミラー」機能を利用すると、コピー元とコピー先を比較し、存在しないファイルだけをコピーすることができるため、素早く処理を完了することができるのです。
以下robocopyを利用してドライブ全体をミラーする方法を説明します。
robocopyでドライブ全体をミラーする
robocopyでドライブ全体をミラーするには、以下のようにコマンドを実行します。
robocopy d:\ e:\ /mir /np /xd "System Volume Information" $RECYCLE.BIN
robocopy コピー元 コピー先 オプション
の順で指定します。
指定しているオプションの意味は以下の通りです。
- /mir: ミラーオプション
- /np: コピーの進捗率を表示しない
- /xd: 除外フォルダを指定(複数の場合空白区切り)
/mirオプションを指定すると、コピー先の内容はコピー元と完全に一致するように操作されます。すなわち、コピー先にだけ存在するファイルやフォルダは削除されますので、コピー元、コピー先を間違えていないか確認することが重要となります。
何回も同じ作業を行う場合、処理をバッチファイルにまとめておくと便利です。
@echo off REM https://qiita.com/tomotagwork/items/5b9e08f28d5925d96b5f setlocal cd %~dp0 set SRCDRIVE=h: set SRCVOLUME=Backup1 set DSTDRIVE=i: set DSTVOLUME=Backup2 for /f "tokens=5" %%v in ('vol %SRCDRIVE%') do ( set vol1=%%v goto done1 ) :done1 if not %SRCVOLUME% == %vol1% ( echo src not ok exit /b ) else ( echo %SRCDRIVE%SRCVOLUME% ok ) for /f "tokens=5" %%v in ('vol %DSTDRIVE%') do ( set vol2=%%v goto done2 ) :done2 if not %DSTVOLUME% == %vol2% ( echo dst not ok exit /b ) else ( echo %DSTDRIVE%DSTVOLUME% ok ) robocopy %SRCDRIVE%\ %DSTDRIVE%\ /mir /np /xd "System Volume Information" $RECYCLE.BIN
SRCDRIVE(コピー元ドライブ名)、SRCVOLUME(コピー元ボリューム名)、DSTDRIVE(コピー先ドライブ名)、DSTVOLUME(コピー先ボリューム名)を適切に書き換え、内容を例えばmirror.cmd
として保存しておきます。
このバッチファイルではコピー元とコピー先の間違いを防ぐため、それぞれのドライブにボリューム名(Backup1、Backup2)を付け、指定されたドライブのボリューム名が一致しているかどうかを確認しています。
後は保存したバッチファイルを実行します(いきなり本番環境で実行せず、テスト用のドライブを準備して試すことをおすすめします)。
▲コマンドが終了すればミラー完了です。失敗したファイルやディレクトリが存在しないか確認しておきます。初回はそれなりに時間がかかりますが、途中で中断したとしても再度実行すれば続きからコピーすることができます。
▲二回目以降は、ファイルが変更されていない場合、チェックだけですぐに処理が完了します。
まとめ
Windowsの「robocopy」を利用してドライブ全体をミラーする方法を説明しました。/mirオプションはコピー先の内容が消えることがある危険なオプションですが、正しく運用できれば大変便利です。
robocopyには他にも多数のオプションが存在し、詳細はMicrosoft Learnで確認可能です。
Windows 11を使いこなすための情報は以下のページにまとめています。