Открыть сервис

Robocopy: утилита копирования файлов Windows

Robocopy (от англ. Robust File Copy — «надёжное копирование файлов») — консольная утилита командной строки для Windows, предназначенная для синхронизации, резервного копирования и зеркалирования файлов и каталогов. Отличается повышенной устойчивостью к сбоям сети и ошибкам ввода-вывода, поддерживает многопоточность и возобновление прерванных операций. Входит в состав операционных систем семейства Windows NT (начиная с Windows Vista и Windows Server 2008) как стандартный компонент, а также распространяется в составе Windows Resource Kit для более ранних версий.

История

Robocopy была создана в 1997 году как внутренний инструмент для нужд подразделения Microsoft, занимавшегося разработкой операционных систем. Автором утилиты является Кевин Аллен (Kevin Allen). Первоначально программа использовалась для управления крупными файловыми серверами и миграции данных. В 2003 году Robocopy была включена в состав Windows Server 2003 Resource Kit, что сделало её доступной для системных администраторов. Начиная с Windows Vista, утилита стала поставляться вместе с операционной системой, заменив собой устаревшую команду copy и частично функциональность xcopy. В последующих версиях Windows, включая Windows 10 и Windows 11, Robocopy остаётся штатным инструментом и продолжает развиваться, хотя значительных изменений в её синтаксисе не происходило.

Основные возможности

Robocopy предоставляет широкий набор опций, позволяющих гибко настраивать процесс копирования. Ключевые возможности включают:

  • Многопоточное копирование (параметр /MT): ускоряет перенос большого количества мелких файлов за счёт использования нескольких потоков одновременно.
  • Зеркалирование каталогов (параметр /MIR): полная синхронизация исходного и целевого каталогов, включая удаление лишних файлов в целевом расположении.
  • Копирование атрибутов и метаданных: сохраняет временные метки, атрибуты файлов, списки управления доступом (ACL), альтернативные потоки данных (ADS) и информацию о владельце.
  • Возобновление копирования: при обрыве связи или ошибке утилита может продолжить работу с места прерывания, не начиная заново.
  • Фильтрация файлов: включение или исключение файлов по маске, размеру, дате изменения и другим критериям.
  • Режим очистки (параметр /PURGE): удаление файлов в целевом каталоге, которых нет в исходном.
  • Журналирование: ведение подробного лога операций, включая запись в файл журнала.

Синтаксис и параметры

Базовый синтаксис команды выглядит следующим образом:

`` robocopy <источник> <назначение> [<файлы>] [<параметры>] ``

Источник и назначение — пути к каталогам. Параметр <файлы> позволяет указать конкретные файлы или маски (например, *.docx). Основные параметры группируются по функциональному назначению:

ГруппаПримеры параметровНазначение
Режимы копирования/S, /E, /MIR, /PURGEКопирование подкаталогов, зеркалирование, очистка
Фильтры/XF, /XD, /MAXAGE, /MINAGE, /MAXSIZE, /MINSIZEИсключение/включение файлов и папок по атрибутам
Атрибуты/COPY, /DCOPY, /SEC, /DATSКопирование метаданных, ACL, временных меток
Потоки и производительность/MT, /R, /W, /NPЧисло потоков, число повторов, задержка, отключение индикатора
Журнал/LOG, /LOG+, /TEE, /VЗапись лога в файл, подробный вывод

Например, команда для полного зеркалирования каталога D:\data в сетевую папку \\server\backup с удалением лишних файлов и многопоточностью выглядит так:

`` robocopy D:\data \\server\backup /MIR /MT:16 /LOG:backup.log ``

Коды возврата

Важной особенностью Robocopy является система кодов возврата, которая позволяет автоматизировать её использование в скриптах. Код 0 означает, что файлы были скопированы успешно без ошибок. Коды 1–7 являются битовой маской, где каждое значение соответствует определённому событию: 1 — файлы скопированы, 2 — лишние файлы удалены, 4 — обнаружены несоответствия, 8 — ошибки копирования. Код 8 и выше сигнализирует о сбоях, требующих внимания администратора. Для проверки результата в пакетных файлах часто используется конструкция if %errorlevel% geq 8 exit /b 1.

Применение

Robocopy широко используется в следующих сценариях:

  • Резервное копирование: создание регулярных резервных копий данных на внешние носители или сетевые хранилища.
  • Миграция данных: перенос пользовательских профилей, файловых серверов и баз данных между машинами.
  • Синхронизация каталогов: поддержание актуального состояния файлов на нескольких серверах или рабочих станциях.
  • Автоматизация задач: встраивание в скрипты PowerShell и пакетные файлы для выполнения плановых операций через Планировщик заданий Windows.
  • Восстановление после сбоев: копирование данных с повреждённых дисков, так как утилита способна пропускать проблемные файлы и продолжать работу.

В отличие от стандартной команды copy, Robocopy корректно обрабатывает длинные пути (более 260 символов) при использовании параметра /LFSM или при поддержке длинных путей в системе, а также умеет работать с файлами, открытыми другими приложениями, в ограниченном режиме.

Ограничения и альтернативы

Robocopy работает только в среде Windows и не имеет встроенной поддержки шифрования или сжатия данных. Для копирования файлов с одного сервера на другой с сохранением разрешений требуется запуск от имени администратора. В средах Linux и macOS аналогичную функциональность предоставляют утилиты rsync и cp с соответствующими опциями. В Windows PowerShell для схожих задач может использоваться командлет Copy-Item, однако он уступает Robocopy в производительности и надёжности при работе с большими объёмами данных.

Интересные факты

  • Robocopy поддерживает параметр /B, который позволяет копировать файлы в режиме резервного копирования, обходя ограничения прав доступа.
  • Утилита имеет режим /L (list only), который показывает, какие файлы были бы скопированы, без фактического выполнения операции, что удобно для предварительной проверки.
  • В Windows 10 и 11 Robocopy используется самой системой для переноса пользовательских данных при обновлении до новой версии операционной системы.
Загружаем BFOmetr…