HDD内のフォルダーとファイルをコピーしたい。
しかも差分だけコピーしたい。
そんな場面はないでしょうか?
私はNASのHDDに音楽データを保存しているのですが、RAIDを組んでいません。
そのため新しくデータを追加する度に、PCのHDDに差分のファイルをコピーしています。
しかし毎回手動で差分コピーするのは面倒です。
そこで今回ご紹介するのはRobocopyというWindowsのコマンドです。
正式にはRobust(堅牢な) File Copyと呼ばれます。
このコマンドを使えば、自動で差分データをコピーできます。
使いかた
基本的なコマンド形式は以下のとおりです。
robocopy <コピー元> <コピー先> <ファイル名> <オプション>
<コピー元>と<コピー先>の記載位置は逆にしないように気を付けてください。
以下は<オプション>の説明です。
/mir
コピー元とコピー先のデータを同期コピーします。ただしコピー元に存在しないファイルとフォルダーはコピー先で削除されます。ちなみに、代わりに/Eオプションを使うとコピー先で削除されません。
/NP
進捗状況の表示を行いません。
/TEE
/LOG や /UNILOG でログをファイルに出力する場合でも、コンソールへのログ出力を行います。
/R:n
ファイルコピーに失敗した場合に再度コピーを試す回数です。
/W:n
再試行する時の待ち時間(秒)です。
サンプル
学習用に、実際にNASからパソコンのHDDに差分バックアップ(/mirオプションを使用)を行うサンプルを例に説明します。
ここでは例として
NAS(コピー元)
\\192.168.11.16\Music
HDD(コピー先)
G:\MusicDrive
としています。
なお本プログラムを運用した結果の影響については、一切責任を負いかねます。十分にご注意ください。特に<コピー元>と<コピー先>は十分に気を付けてください。うっかりコピー元の変数にコピー先のアドレスやディレクトリを入れないようにしてください。その逆も然りです。
また、上述のとおり/mirオプションはコピー元に存在しないファイルとフォルダーはコピー先で削除されます。コピー先でファイルやフォルダーを削除されたくない場合は、代わりに/Eオプションを使うことをおすすめします。
またダミーデータを使って、十分に練習することを推奨します。
@echo off
rem Cドライブ直下に01_BackupLog-Sフォルダを作成する
mkdir C:\01_BackupLog-S
rem ログ保存
set logfile-S="C:\01_BackupLog-S\%date:~0,4%-%date:~5,2%-%date:~8,2%_robocopy-for-NAStoHDD.log"
rem コピー元
set SrcDir-S=\\192.168.11.16\Music
rem コピー先
set TrgDir-S=G:\MusicDrive
rem コピー開始
robocopy "%SrcDir-S%" "%TrgDir-S%" /mir /NP /TEE /R:1 /W:1 /LOG+:"%logfile-S%"
テキストエディターにコマンドを入力した後、拡張子.batで保存します。
コマンドを実行すると、Cドライブ直下に01_BackupLog-Sフォルダが作成されています。この中にyyyy-mm-dd_robocopy-for-NAStoHDDという名前のファイルが生成されるので、ログを参照できます。
起動時に実行
バックアップの実行し忘れ防止のために、起動時にバッチプログラムを実行するやり方は下記のとおりです。
コメント