Robocopy в Windows: копіювання і синхронізація файлів
Robocopy — вбудований в Windows інструмент для надійного копіювання файлів. Як синхронізувати папки, копіювати з відновленням і автоматизувати резервне копіювання.
Robocopy (Robust File Copy) вбудований в Windows починаючи з Vista. Це набагато надійніший спосіб копіювати файли ніж стандартний drag-and-drop — особливо для великих обсягів і по мережі.
Базовий синтаксис
robocopy Джерело Призначення [Файли] [Параметри]
Приклад:
robocopy "C:\Documents" "D:\Backup\Documents"
Копіює всі файли з Documents в Backup\Documents.
Найважливіші параметри
| Параметр | Що робить |
|---|---|
/S |
Копіювати підпапки (крім порожніх) |
/E |
Копіювати підпапки включно з порожніми |
/MIR |
Дзеркало — синхронізує, видаляє зайве в призначенні |
/MOVE |
Перемістити (видалити з джерела після копіювання) |
/R:3 |
3 спроби при помилці (за замовчуванням 1000000) |
/W:5 |
Чекати 5 секунд між спробами |
/LOG:file.log |
Записувати лог у файл |
/NP |
Не показувати % виконання |
/XF *.tmp |
Виключити файли з маскою |
/XD folder |
Виключити папку |
/Z |
Відновлюваний режим (для нестабільних з'єднань) |
/B |
Режим резервного копіювання (обходить деякі обмеження доступу) |
Практичні приклади
Синхронізація папки (найчастіший сценарій):
robocopy "C:\Work" "D:\Backup\Work" /MIR /R:3 /W:5 /LOG:"D:\Backup\robocopy.log"
Копіювання з підпапками без дзеркалювання:
robocopy "C:\Photos" "E:\Photos" /E /R:3 /W:5
Копіювання тільки нових і змінених файлів:
robocopy "C:\Source" "D:\Dest" /E /XO
/XO — пропустити файли що старші в призначенні.
Виключити певні папки і файли:
robocopy "C:\Users\Name" "D:\Backup\Name" /E /XD ".git" "node_modules" /XF "*.tmp" "*.log"
По мережі з відновленням при обриві:
robocopy "\\Server\Share" "D:\LocalCopy" /E /Z /R:10 /W:30
Коди виходу (Exit Codes)
Robocopy повертає число після завершення:
| Код | Значення |
|---|---|
| 0 | Нічого не скопійовано (все актуально) |
| 1 | Файли успішно скопійовані |
| 2 | Є зайві файли в призначенні |
| 4 | Невідповідності (mismatched files) |
| 8 | Помилки копіювання |
| 16 | Серйозна помилка |
Коди 0-7 вважаються успіхом. Код 8+ — проблема.
Автоматизація через Task Scheduler
$action = New-ScheduledTaskAction `
-Execute "robocopy.exe" `
-Argument '"C:\Important" "D:\Backup\Important" /MIR /R:3 /W:5 /LOG:"D:\Backup\log.txt" /NP'
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
Register-ScheduledTask -TaskName "Nightly Backup" `
-Action $action -Trigger $trigger `
-RunLevel Highest -Force
Порівняння з xcopy і copy
| copy | xcopy | robocopy | |
|---|---|---|---|
| Підпапки | ❌ | ✅ | ✅ |
| Відновлення при помилці | ❌ | ❌ | ✅ |
| Синхронізація | ❌ | ❌ | ✅ |
| Лог | ❌ | Частково | ✅ |
| Швидкість | Низька | Середня | Висока |
Резюме
robocopy Джерело Призначення /MIR /R:3 /W:5 — цієї команди достатньо для 90% завдань резервного копіювання. /MIR синхронізує обидві папки, /R:3 /W:5 запобігає зависанню при помилках. Додай /LOG щоб мати журнал виконання.