コマンドプロンプトとrobocopyで快適に自動バックアップ

数年前から何個か外付けHDDを運用するようになった。定期的にバックアップのため、色んなフォルダをドラッグ&ドロップしてコピー。全部上書きするため、時間もかかり本当に面倒くさい・・・なんとかならないかと思ってたら、コマンドプロンプトとrobocopyというコマンドを用いてバッチファイルを作り、自動化できることがわかった。プログラミングには疎いのだが、そんなに難しくなかったので試してみたところ、とても快適になった。図解すると以下のようになる。
f:id:yojik25680:20150127215801p:plain

Robocopyとは

二つのフォルダ名(A,Bとする)を指定し、フォルダAからフォルダBへと内容をコピーしてくれるというコマンド。
この時、同時に /mir というクラスを設定してやると、BがAと完全に同じになるようにB内の余分なファイルを削除してくれる。(言い換えると、BにあってAにないファイルたちを、Bから削除する) つまり、マスターとするフォルダ達さえ注意して編集していればbatファイル一個で勝手にバックアップ&いらないファイルを消去して整理してくれるわけです。詳しい内容は以下を参考されたし。
Tech TIPS:Windowsのrobocopyコマンドでフォルダーをバックアップ/同期させる - @IT
Windows TIPS:robocopyコマンドでコピーするファイルの種類を選択/変更する - @IT
Robocopyでフォルダをコピー
パソコンのファイルをrobocopyで手堅くバックアップする方法 - パソコンのバックアップ方法まとめ [amaoto-log(あまおとろぐ)]

行った手順

  • ドライブと保存したいフォルダたちのマッピングをexcelにて作成し、エクセルでコマンド一覧を作成。(数式の&と” ”(空白)で文字結合・空白調整) 私の場合外付けHDDが5個ほどあり、バックアップ管理したいフォルダが5種類。excelにてマッピングすることにより、将来的に構成が変わってもわかりやすいようにした。

f:id:yojik25680:20150127215806p:plain


  • メモ帳に貼り付け、.batファイルで保存し完成。

f:id:yojik25680:20150127215803p:plain
f:id:yojik25680:20150127215804p:plain


クラス設定の解説:

/mir: ミラーリングコピー(前述)
/fft: タイムスタンプ2秒とする(更新日時が2秒以内のズレなら無視)
/xo: 古いファイルを除外
/r:0: リトライ回数0
/XJD: フォルダへの接合を除く
/XJF システム属性を除く
/LOG: ログファイルを出力する
attrib -H -S: 隠しファイル化の解除

スケジューラに入れれば毎日自動バックアップ、ということも可能なようだ。NASやサーバ運用にも有効と思われる。プログラムが走っている様子↓