フォルダーの同期・バックアップを自動化する方法 - 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メモリが接続されたときにだけ自動処理を実行」を参照)