コピー元と全く同じ状態になるようにバックアップを取るバッチを作る
前回の記事
では、「コピー元からコピー先へ、コピー先より新しいフォルダ・ファイルをコピーする」というだけの処理を作りました。
ただ、これだと、元フォルダ内でリネームしたり消したりしたファイルも、そのまま蓄積していってしまいます。バックアップとしてはそういう挙動にしたい場合もあるので一概にダメではないのですが、コピー元とコピー先を常に全く同じ状態に保っといたほうが便利そうだな……と思ったので、そのようなバッチを作ります。
結論
robocopy D:\ F:\backup /e /dcopy:dat /mir /xd "*$RECYCLE.BIN"
「Dドライブの中身全部のうち1日以内にアクセスしたファイルを、Fドライブのbackupと同期してバックアップしてくんろ」の命令です。ソースフォルダのパスと保存先フォルダのパスは各々調整していただいて。
robocopyコマンドを使って、オプション設定をあれこれくっつけてやることでよしなにやってくれます。
このコマンドを使った場合、ファイルのタイムスタンプが更新されないので、バックアップ用にコピーしたときのタイムスタンプに更新されてしまう問題も解消できます。
よしなにやってくれるオプション設定
【/e】サブディレクトリとその中身もコピーする(空のディレクトリもコピーする)
【/dcopy:dat】ディレクトリをコピーする際、データと属性とタイムスタンプをそのままコピーします。
【/mir】コピー元には存在していないファイルが、コピー先にだけある場合、コピー先の該当ファイルを削除して、コピー元とコピー先の整合性を保ちます(コピー先フォルダのセキュリティ設定も上書きする)
【/xd "*$RECYCLE.BIN"】ゴミ箱を除外します。Fドライブの中身を全部Dドライブにコピーする、みたいな処理をしようとすると、隠しフォルダにも表示されない、Fドライブ内のゴミ箱までコピー使用として権限エラーで止まるので、ゴミ箱を除外する設定をします。DドライブのdataフォルダをFドライブのbackupへ、というようにフォルダを指定して実行する時は多分不要。
その他、設定可能なオプションの詳細はここで確認出来ます。
でもちょっと日本語訳が違和感。
backupフォルダが非表示になる場合
上記のコマンドを実行したときに何故かbackupフォルダが非表示になり、隠しファイルを表示する設定にしても出てこない、でも容量は減ってないし、アドレスバーにアドレス直接打てば出てくる……という不思議な状態になりましたがどうやらこういうことのようで
コマンドのオプション設定を色々見直して見たんですが、どうも解決方法が見つからないので、とりあえずバッチの最後に
attrib -S -H F:\backup
を追記して強制的に再表示させることにしています。
コメント