Programming Field

フォルダーの同期・バックアップを自動化する方法 - Windowsコマンド実用例

特定のフォルダーを定期的に別の場所へ完全に同期(ミラーリング)することで、手動コピーの手間を省き、バックアップの信頼性を高めます。Robocopy を使った基本的な例と、ログ出力・世代管理・スケジュール実行といった応用方法を紹介しています。

使用コマンド

  • Robocopy - 高速・堅牢なフォルダーコピー&同期ツール
  • If - 条件分岐でエラーハンドリング
  • Schtasks /Create - タスクスケジューラへの登録

バッチファイルの例

@echo off
set SRC=C:\Users\%USERNAME%\Documents
set DST=D:\Backup\Documents
set LOG=C:\Backup\backup_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log

robocopy "%SRC%" "%DST%" /MIR /R:3 /W:5 /LOG+:"%LOG%"
if %ERRORLEVEL% GEQ 8 (
  echo バックアップ中にエラーが発生しました。 >> "%LOG%"
)

/MIR は完全同期(削除も反映)を意味します。ログは日付付きで保存されます。

補足事項

  • /LOG+ でログを追記形式にできます。毎日ファイルを分けるには %DATE% などの環境変数を利用します。
  • ERRORLEVEL (終了コード) は Robocopy 独自の値を返すため、GEQ 8 などの判定が必要です。
  • 誤削除を避けたい場合は /L オプションを付けることでシミュレーション実行が可能です。

応用例

  • スケジュール実行(毎日20時):
    schtasks /Create /TN "BackupTask" /TR "C:\scripts\sync.bat" /SC DAILY /ST 20:00 /RL HIGHEST /F
  • 世代管理(履歴を残すバックアップ):
    set TODAY=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
    robocopy C:\Project D:\Backup\Project_%TODAY% /E

    /E を使えば空フォルダーも含めて全コピーできます。日付付きディレクトリに保存することで世代を残せます。

  • USBメモリ接続時にだけバックアップ: (「特定のUSBメモリが接続されたときにだけ自動処理を実行」を参照)

関連項目