Привет, Хабр!
Расскажу про Robocopy — утилиту Windows для апдейтнуого копирования. Она живёт в системе с Windows Vista (раньше была частью NT4 Resource Kit) и предназначена для работы с большим количеством файлов. Robocopy используется для копирования файлов. Часто её используют для миграции файловых серверов или резервного копирования. По сути это более навороченная замена привычным COPY
/XCOPY
: она поддерживает возобновление копирования, зеркалирование каталогов, многопоточность и многое другое.
Основные возможности
Robocopy умеет продолжать копирование после обрывов сети. Если при передаче данных произошло отключение, Robocopy запомнит, где остановилась (подвешенные файлы помечаются датой 01.01.1970 и содержат информацию, с какого места продолжить). По дефолту утилита сохраняет все атрибуты файлов и папок, а также NTFS‑разрешения (ACL) и временные метки. К примеру, параметр /B
позволяет обойти любые ограничения доступа (получить права резервного копирования) и всё равно скопировать файл.
Есть специальный режим зеркалирования (ключ /MIR
), который синхронизирует две папки: ненужные файлы из назначения будут автоматически удалены. При этом стандартное поведение Robocopy — пропускать уже скопированные файлы, если их размер и время модификации не изменились. Ещё из плюсов — индикатор прогресса и очень корректная работа с длинными путями. Windows Explorer банально не умеет считать файлы с путями длиннее 260 символов, а Robocopy спокойно с ними справляется (фича /256
даже позволяет отключить поддержку длинных путей, если это нужно).
Еще есть функция многопоточного копирования (/MT:<n>
). С Windows 7/Server 2008 R2 можно указать сразу несколько потоков — и копирование пойдёт заметно быстрее на многоядерных системах. Утилита выдаёт код возврата (exit code), чтобы автоматические скрипты могли проверить успех операции. Например, 1
— все файлы скопированы, 0
— ничего копировать не пришлось (всё уже есть в папке назначения), а коды ≥8 сигнализируют о сбоях.
Синтаксис команды
Конструкция команды robocopy
очень простая:
robocopy <source> <destination> [<fileFilter>] [<options>]
Где <source>
— исходный каталог, <destination>
— конечный, а через <fileFilter>
можно указать маску файлов (по умолчанию .
). Путь может быть как локальным, так и сетевым (UNC, например \\server\share\
). Утилита живёт в %SystemRoot%\System32
, просто вызывайте robocopy
из командной строки или BAT«ника.
Если вы копируете файлы из корня диска (например, robocopy C:\ D:\Backup
), то папке назначения присваиваются атрибуты Hidden и System. Учтите это, если вдруг папка исчезнет из обзора — снимите эти атрибуты вручную.
Разберём основные опции:
/E
— копирует все подпапки, включая пустые (то есть без ограничений по вложенности). Если убратьE
и взять просто/S
, будут скопированы все подпапки, кроме пустых./Z
— копирует в режиме перезапуска. Т.е если копирование прервётся, можно запустить команду снова, и она продолжит с места обрыва./B
— копирует в режиме резервного копирования, игнорируя параметры доступа. Без этого некоторым файлам доступ может быть отказан. Можно сочетать/ZB
, тогда Robocopy сначала попытается /Z, а при отказе переключится на /B./COPY:flags
— указывает, что копировать. По умолчанию этоDAT
(Data, Attributes, Timestamps). Есть и более «толстые» варианты. Ключ/COPYALL
эквивалентенDATSOU
(все доступные данные: данные, атрибуты, временные метки, ACL, владельцы, аудит). Если нужна большая скорость, оставьте/COPY:DAT
./R:n
и/W:n
— число повторов при ошибке и задержка в секундах между ними. По умолчанию Robocopy готово повторить 1 000 000 раз и ждать 30 секунд! Обычно стоит явно прописать/R:3 /W:5
, чтобы не ждать вечность. Можно сохранить эти значения в реестре ключом/REG
./MIR
— полностью зеркалирует структуру (что эквивалентно/E + /PURGE
). Будьте осторожны: все файлы, которых нет в исходнике, удалятся из папки назначения. Если вы не хотите удалять лишние файлы, то есть просто/E
(без/PURGE
)./MOV
и/MOVE
— после копирования удаляют файлы (и директории с/MOVE
) из источника. Например,robocopy C:\src D:\dst /E /MOVE
перенесёт файлы и папки, а потом удалит их изC:\src
. Эти ключи удаляют файлы безвозвратно после копирования — используются, когда нужно переместить данные./MT:n
— многопоточное копирование: число потоковn
(от 1 до 128, по умолчанию 8)./MT
нельзя сочетать с/IPG
или/EFSRAW
./XF <file>
и/XD <dir>
— исключают указанные файлы/папки. Поддерживаются подстановки и?
. Например,robocopy C:\src D:\dst /E /XF .tmp /XD \temp
пропустит все.tmp
и папку\temp
./MAXAGE:n
и/MINAGE:n
— фильтруют по дате изменения./MAXAGE:7
допустит только файлы младше 7 дней,/MINAGE:20230101
— только файлы старше указанной даты. Аналогично/MAX:
и/MIN:
задают ограничения по размеру.
И несколько полезных: /NFL
//NDL
//NP
выключают различные части вывода (имена файлов, каталоги, индикатор прогресса) — когда хочется чистый лог. /TEE
выведет лог и в консоль, и в файл одновременно. /ETA
покажет оценку времени завершения текущей копии каждого файла.
Отмечу еще пару опционо». Если копируете по медленной сети, можно задать паузу между пакетами /IPG:n
или ограничение пропускной способности /IORMAX:n
, /IORATE:n
. Также, если источник или цель не NTFS, стоит добавить /FFT
— это учитывает двухсекундную точность временных меток FAT. Для сухого прогона есть /L
: она ничего не копирует, а лишь выводит, что было бы скопировано.
Примеры
Перейдём к примерам.
1. Базовое копирование со всеми подпапками. Пусть нам нужно скопировать содержимое папки (включая все вложения, даже пустые папки) в резервную локацию, сохранив метки времени и права. Одной из самых частых комбинаций будет что‑то вроде:
robocopy C:\Data\Source D:\Backup /E /Z /MT:8 /R:3 /W:5 /LOG:C:\Logs\Backup.log
Здесь /E
— копировать все подпапки (и пустые), /Z
— в режиме перезапуска (для надёжности на случай обрыва), /MT:8
— 8 потоков копирования, /R:3 /W:5
— три попытки и 5 секунд ожидания, а /LOG:
сохраняет отчет. Таких команд можно накидать в любо́й батник — она работает и локально, и по сетевому пути.
2. Зеркалирование двух папок. Если нужно синхронизировать папки «документ‑резерв», в ход идёт /MIR
. Она скопирует всё из исходника в цель и удалит лишнее в цели. Например:
robocopy C:\Data\Source D:\Backup /MIR /R:2 /W:5 /LOG:C:\Logs\Mirror.log
Эта команда полностью зеркалит Source
и Backup
. Обратите внимание: файлы, которых нет в Source
, удалятся из Backup
. Если такого поведения не хотим, есть просто /E
без /MIR
.
3. Фильтрация по возрасту. Нередко нужен инкремент: копировать только новые файлы. Робокопи сама не хранит историю, но можно заложить логику через /MAXAGE
или скрипт. Например, чтобы скопировать только файлы младше 7 дней:
robocopy C:\Data\Source D:\Backup /E /MAXAGE:7 /LOG:C:\Logs\Inc.log
С /MAXAGE:7
попадут файлы, измененные не позже, чем 7 дней назад. Аналог из официальных примеров (учтён ещё /MOV
):
robocopy C:\Data\Source D:\Backup /S /MAXAGE:7 /MOV /LOG:C:\Logs\IncMove.log
Опция /MOV
удалит исходные файлы после копирования (используйте её только если уверены).
4. Отбор и исключение файлов. Можно копировать выборочно. Допустим, в каталогах есть .tmp
, их не нужно. Используем /XF .tmp
. Или наоборот — /XA:R
чтобы исключить только‑файлы только для чтения. Пример:
robocopy C:\Data\Source D:\Backup /E /XF *.tmp /XD \Temp /LOG:C:\Logs\Filtered.log
С этой командой все .tmp
и папка Temp
будут пропущены. Ещё вариант — тянуть только нужные расширения: robocopy ... .txt .docx
.
5. Многопоточность и скорость. Чтобы прокачать скорость, можно увеличить число потоков. Например, при копировании очень большого архива:
robocopy C:\BigData D:\BigBackup /E /MT:32 /LOG:C:\Logs\Big.log
32 потока — будет быстрее, чем обычный /MT:8
. Учтите, что при очень большом /MT
нагрузка на диск может вырасти, и журналы лучше выводить в /LOG
(чтобы консоль не тормозила). А чтобы не забить сеть, есть флаги /IPG
и /IORATE
. Например, robocopy ... /IORATE:1m
ограничит I/O до ~1 МБ/.
6. Перемещение и чистка. Если нужно не копировать, а переместить (каскадно удалить из источника), то используем /MOVE
и /MOV
. К примеру:
robocopy C:\Data\Old D:\Archive /E /MOVE /LOG:C:\Logs\Move.log
После этого в C:\Data\Old
останется только структура каталогов (без файлов). Опция /MOVE
удаляет и файлы, и папки (а /MOV
— только файлы). В любом случае — всегда внимательно: удаление в источнике произойдёт безвозвратно после копирования.
7. Журналирование. Рекомендую всегда писать лог: ключ /LOG:файл
(перезаписывает) или /LOG+:файл
(дозаписывает). Так можно в конце проверить, сколько скопировано/пропущено файлов. Если же нужен только вывод без копирования, используйте /L
(dry run).
Нюансы
Пути длиной >260 символов. Как выяснилось, Explorer их не считает, но Robocopy справляется, если не указывать /256
. Копируй длинные пути спокойно — Explorer за тебя статистику не посчитает, зато Robocopy спокойно перенесёт файлы по пути \\?\...
. Если вдруг нужна строгость, /256
отключает обработку >256 символов.
Файлы в использовании. Если при копировании появляются Access Denied (файл занят), Robocopy в стандартном режиме повторит копию миллион раз. Лучше заранее закладывать /R
и /W
, и/или запускать в момент наименьшей нагрузки (тихий час) или снапшотом VSS.
Файловые системы. Если целевая или исходная папка на FAT/SSD без NTFS, параметр /FFT
даст двухсекундную точность времени, иначе Robocopy может считать незначительно изменившиеся файлы новыми.
Угрызения совести. Опции типа /MIR
и /MOVE
влияют на файлы — не забудьте сделать тест (например, в пустой папке) перед продакшн‑запуском. Можно вообще сначала выполнить команду с /L
(dry run), посмотреть, что будет сделано, и лишь потом убирать /L
и запускайте по‑настоящему.
Коды возврата. После копирования советую проверять %ERRORLEVEL%
. Коды от 0 до 7 — можно интерпретировать как «успешно (с разной степенью)», а 8 и выше — ошибки.
Robocopy не заменит GUI‑бекапы, но в сценариях скриптов и администрирования проявляет себя великолепно. Подытожим: чтобы начать, достаточно базового синтаксиса (как у COPY
), но за спиной Robocopy — полноценный набор инструментов: зеркалирование, мультипоток, возобновление, фильтрация, и даже сжатие SMB‑соединения при передаче (ключ /compress
).
В работе с Robocopy мы видим, насколько важно владеть встроенными инструментами Windows для администрирования и автоматизации рутинных задач. Глубокое понимание подобных утилит позволяет не только ускорять процессы копирования и резервирования данных, но и грамотно выстраивать систему администрирования.

Если вы хотите системно изучить администрирование Windows и освоить навыки работы с сервисами и инструментами ОС, приглашаем вас на курс «Администратор Windows».
Нужен карьерный апгрейд без боли для бюджета? Подписка OTUS: три курса на 6 месяцев, подстраиваете программу под свои задачи. Выбрать свой тариф