palm84.com

革命的愛熊主義者同盟!

Robocopyコマンドでフォルダーのバックアップ

f:id:palm84:20180925202705p:plain

Robocopy はコマンド実行ということで最初は手間かかるけど、細かく指定できるのがええとこですよね。というわけで超私的自己流バックアップ方法を書いてみましたよん。う~んマニアック(笑)...

INDEX

about

誰でも知ってるような気もするので今更ですけど (´・ω・`) 、フォルダー(ディレクトリー)のバックアップの為に生まれたようなコマンドであります(笑)。

XCOPYコマンドとの大きな違いは、ミラーリングが可能なとこ。ミラーリングとは単一方向の同期っていうと難しそうですけど、FolderA から FolderB へバックアップする際、A側で無くなったファイルはB側でも削除されるってこと。

あと、多少手間は必要ですが、除外指定やログの記録、条件設定もいろいろ可能。

※ Windows 7 では少しオプションに違いがあるのでご注意。

ミラーリングの基本

超基本がこんな風

robocopy D:\FolderA Z:\FolderB /mir

初回の実行時(※ FolderB が空の場合とか)はこれだけでいいかもしれないです。

尚、上記では省いてますが、パスや変数はなるべく引用符(")で囲むようにしませう。(※ パス名にスペースを含む場合などは必須)

【追記】万が一、同名フォルダが存在する場合を考えて、初回だけは /mir ではなく /s /e オプションを使う方が安全かも。

  • /mir - ミラーリングされる為、コピー先にしかない既存ファイルはなくなる
  • /s /e - 上書きコピーなので既存ファイルは残る
2021.4.3 追記】フォルダを放り込みコピー

例えば、ファイラーでの操作と同様に Backup ディレクトリ内へ指定フォルダを放り込むかんじだと…

robocopy D:\hoge Z:\Backup\hoge /s /e

Backup 内に hoge がなくても新規作成されます。

コピーのオプション指定

私が使ってるのを列挙すると…

  • /MIR - ミラーリング
  • /DCOPY:DAT - ディレクトリのタイムスタンプもコピー
  • /FFT - FAT ファイル時間2秒の差を無視(※ FAT32を使ってないなら不要)
  • /XO - 古いファイルを除外(FolderAのファイルがFolderBの同名ファイルより古い場合)
  • /NP - 進行状況なし(※ あってもいいかも?)
  • /ETA - コピーするファイルの推定完了時刻を表示
  • 【追記】/TEE - ウィンドウとログ ファイルの両方に出力
  • /UNILOG+: - UNICODEでログを出力 (既存のログに追記)
  • /XF - 除外ファイルを指定
  • /XD - 除外ディレクトリ(フォルダー)を指定

簡単なバッチファイルを作る

ファイルの冒頭をこんなかんじで、実行するPCをここでは「dell」に限定してます

@echo off
title %~nx0
pushd %~dp0
set SourcePC=dell
if /i not "%ComputerName%"=="%SourcePC%" (
echo:
echo        ==============================================================
echo             %SourcePC% から実行するべし!
echo        ==============================================================
pause >nul
GOTO :EOF
)

フォルダ名、除外ファイル、除外フォルダー、コピー・オプションを指定…

set Source_01=D:\My_Files\Documents
set Target_01=Z:\Backup\Documents
set log=Robocopy-log.txt
set Ex_Folder_01=
set Ex_Folder_02=
set Ex_Folder_03=
set Ex_File_01=
set Ex_File_02=
set Ex_File_03=
robocopy "%Source_01%" "%Target_01%" /mir /DCOPY:DAT /FFT /xo /NP /ETA /TEE /UNILOG+:%log% /xf "%Ex_File_01%" "%Ex_File_02%" "%Ex_File_03%" /xd "%Ex_Folder_01%" "%Ex_Folder_02%" "%Ex_Folder_03%"

終了時に停止させる、何かキーを押せばコマンド窓を閉じる

:DONE
echo.
echo             Done !
echo.
pause >nul

はいはい、大したことなくてすみません… 。゚(゚´Д`゚)゚。

いろいろ

GUIでやりたい場合はこんなソフトもありますな...

もう一つ、双方向同期も可能です。まだ使いこなせてませんが期待大!


ほなまたー!


[asin:B013JUIF7W:detail]