Robocopy: синхронізація папок і резервне копіювання в Windows
Robocopy — вбудований інструмент Windows для копіювання і синхронізації папок: основні параметри, дзеркальне копіювання, журналювання і автоматизація через Task Scheduler.
Robocopy (Robust File Copy) — вбудований у Windows інструмент для надійного копіювання великих обсягів даних. Значно потужніший за звичайний copy або xcopy.
Базовий синтаксис
robocopy [джерело] [призначення] [файли] [параметри]
rem Скопіювати папку
robocopy C:\Source D:\Destination
rem Скопіювати тільки .docx файли
robocopy C:\Docs D:\Backup *.docx
rem Скопіювати кілька типів файлів
robocopy C:\Docs D:\Backup *.docx *.xlsx *.pdf
Найважливіші параметри
| Параметр | Що робить |
|---|---|
/E |
Копіювати всі підпапки включно з порожніми |
/S |
Копіювати підпапки (без порожніх) |
/MIR |
Дзеркало — робить призначення ідентичним джерелу (видаляє зайві файли) |
/COPYALL |
Копіювати всі атрибути (права, часові мітки) |
/COPY:DAT |
Копіювати дані, атрибути і часові мітки |
/MOV |
Переміщення (видаляє оригінал) |
/R:3 |
3 спроби при помилці (замість 1 мільйона за замовчуванням!) |
/W:5 |
Чекати 5 секунд між спробами |
/LOG:file.txt |
Зберегти лог у файл |
/NP |
Не показувати відсоток виконання |
/XF |
Виключити файли за маскою |
/XD |
Виключити папки |
/MT:8 |
Багатопотокове копіювання (8 потоків) |
Практичні приклади
Резервне копіювання з логом
robocopy C:\Users\ІМ'Я\Documents D:\Backup\Documents ^
/E /COPYALL /R:3 /W:5 ^
/LOG:D:\Backup\backup-log.txt ^
/NP /TEE
/TEE — виводить і в консоль і в файл одночасно.
Дзеркальна синхронізація
rem УВАГА: /MIR видаляє файли в призначенні яких немає в джерелі
robocopy C:\Source D:\Destination /MIR /R:3 /W:5
Синхронізація тільки змінених файлів (інкрементальна)
robocopy C:\Source D:\Destination /E /XO /R:3 /W:5
/XO — пропустити файли які старші в призначенні (копіювати тільки нові або змінені).
Копіювання по мережі з відновленням
robocopy \\server\share D:\LocalCopy /E /COPYALL /R:5 /W:10 /Z /MT:4
/Z — режим відновлення при збої (restartable mode). /MT:4 — 4 потоки для швидшого копіювання по мережі.
Виключити папки і файли
robocopy C:\Source D:\Destination /E ^
/XD "node_modules" ".git" "temp" ^
/XF "*.tmp" "*.log" "thumbs.db"
Автоматичне резервне копіювання через Task Scheduler
Створи файл backup.bat:
@echo off
set SOURCE=C:\Users\%USERNAME%\Documents
set DEST=D:\Backups\Documents
set LOG=D:\Backups\logs\backup-%date:~-4,4%%date:~-7,2%%date:~0,2%.txt
robocopy "%SOURCE%" "%DEST%" /E /COPYALL /R:3 /W:5 /LOG:"%LOG%" /NP
Додай в Task Scheduler: Автоматизація через PowerShell і Task Scheduler
Коди завершення Robocopy
Robocopy повертає код що показує що відбулось:
| Код | Значення |
|---|---|
| 0 | Нічого не скопійовано (все вже актуально) |
| 1 | Файли скопійовані успішно |
| 2 | Зайві файли в призначенні |
| 4 | Невідповідні файли |
| 8 | Деякі файли не скопійовані (помилка) |
| 16 | Критична помилка |
Коди 0–7 — успіх. 8 і вище — є проблеми.
# Перевірити код в скрипті
robocopy C:\Source D:\Dest /E /R:3 /W:5
if ($LASTEXITCODE -ge 8) {
Write-Output "ПОМИЛКА: деякі файли не скопійовані"
exit 1
} else {
Write-Output "Успішно завершено"
}
Порівняння папок без копіювання
rem Показати що відрізняється без реального копіювання
robocopy C:\Source D:\Destination /E /L /NP
/L — list only, тільки показати що буде скопійовано.
Підсумок
/E /R:3 /W:5 — базові параметри для надійного копіювання. /MIR — дзеркало (обережно — видаляє зайве). /XO — тільки нові файли (інкрементальний backup). /MT:8 — швидше по мережі. Додай в Task Scheduler для автоматичного резервного копіювання.