Robocopy – это консольная утилита Windows для копирования файлов, которую можно использовать для синхронизации/репликации файлов и каталогов, и в сценариях резервного копирования. Robocopy (Robust File Copy) доступна начиная с Windows NT 4.0 Resource Kit, но по умолчанию эта функция появилась только в Windows Vista и Windows Server 2008. Robocopy заменяет Xcopy и copy, как более функциональная.
Содержание:
- Основные возможности Robocopy
- Синтаксис и параметры robocopy
- Использование robocopy для зеркалирования каталогов
- Инкрементальное копирование с помощью robocopy
- Robocopy: перемещение файлов
- Пример использование robocopy в планировщике задач
- Отслеживание изменений в каталогах с помощью robocopy
- Коды возврата (ошибки) robocopy
Основные возможности Robocopy
Кроме обычного копирования файлов и папок из папки источника в каталог назначения, в Robocopy есть множество очень полезных функций:
- Устойчивость к обрывам сети (robocopy может продолжить копирования после восстановления сетевого доступа);
- Корректное копирование файлов с их атрибутами и NTFS правами доступа;
- Копирование с сохранением исходной временной метки;
- Возможность копирования файлов и директорий, запрещенных для доступа даже администратору, с помощью ключа /B (ключ позволяет игнорировать проверку прав доступа, ключ доступен только для участников группы Администраторы или Операторы архива);
- Возможность задать количество попыток копирования файла, если файл недоступен;
- Режим полного зеркалирования директорий;
- Пропуск уже существующих файлов (с одинаковым размером или временной меткой timestamp);
- Индикатор прогресса копирования;
- Корректная работа с длинными путями (более 260 символов);
- Эффективные алгоритмы и многопоточность позволяют выполнять копирование файлов намного быстрее, чем обычное копирование средствами Windows;
- Поддержка коды возврата (что позволяет использовать robocopy в различных внешних скриптах и утилитах).
Официальной графической версии robocopy (c GUI) от Microsoft нет. Существуют пользовательские версии, но их поддержка прекращена. Список неофициальных GUI для robocopy (это сторонние программы):
- EazyCopy
- RoboMirror
- RichCopy
Синтаксис и параметры robocopy
Robocopy имеет много параметров, которые на первый взгляд могут показаться сложными, но имея под рукой документацию, вы с легкостью разберетесь и сможете править скрипты под себя.
Официальная документация: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy
Синтаксис robocopy состоит из двух обязательных параметров (исходный и целевой каталог) и двух необязательных (фильтр файлов и параметры):
robocopy <source> <dest> [фильтр файлов] [параметры]
Поддерживаются как локальные пути, так и UNC, например, \serverdirectory
Полный синтаксис утилиты robocopy (все параметры и их описания) доступны по команде:
robocopy /?
Исполняемы файл robocopy.exe находится в каталоге C:WindowsSystem32.
Поскольку ключей в robocopy много, мы будем рассматривать их на практике, в готовых командах. Мы не будем рассматривать самые простые примеры использования robocopy, т.к. обычно они не вызывают вопросов. Ниже представлены готовые к применению более сложные команды robocopy, которые можно использовать в реальных сценариях.
Для тестирование различных команд robocopy без выполнения операций (копирования, перемещения или удаления) с файлами используется параметр
/L
. Данный параметр вернет список файлов и папок, которые будут скопированы вашей командой.
Использование robocopy для зеркалирования каталогов
Вы можете зеркалировать (синхронизировать) содержимое двух каталог с помощью следующей команды robocopy (под зеркалированием понимается копирование файлов из целевой папки с удалением файлов в целевом каталоге, если они удалены в источнике).
robocopy \testnode1C$source \testnode2c$dest *.txt /MIR /COPYALL /Z /B /J /R:3 /W:1 /REG /TEE /LOG+:%appdata%robocopy.log
-
\testnode1C$source
— исходный каталог, откуда копируются файлы -
\testnode2C$dest
— каталог назначения, куда скопируются файлы -
*.txt
– фильтр файлов. Синхронизируются только .txt файл и директории. -
/MIR
– полное зеркалирование данных в source и dest директориях. Файлы, удаленные из source директории или не присутствующие в ней, также будут удалены из dest. Если вы хотите, чтобы удаленные из source файлы оставались в dest, то поменяйте параметр /MIR на /E -
/COPYALL
– копирует всю информацию о файле (Атрибуты, параметры безопасности и т.д.). Как альтернатива, можно применять флаг /COPY:DT для копирования timestamp, а не всей информации. /COPALL требует прав администратора -
/Z
– robocopy продолжит копирование файла при обрыве. Полезно при копировании больших файлов (неплохая альтернатива копированию файлов по BITS) -
/B
– позволяет robocopy избегать ошибки access denied error. В этом режиме robocopy игнорирует все права на файлы, которые могли бы помешать прочитать/записать файл. Этот режим требует прав администратора либо участие в группе Операторы архива -
/J
– Копирование без буфера (файлового кэша, оперативной памяти). Эффективно для больших файлов. -
/R:3
– количество попыток скопировать недоступный файл. Значение по умолчанию – миллион, поэтому необходимо его сменить. -
/W:1
– секунды между попытками скопировать недоступный файл. Значение по умолчанию – 30 секунд. -
/REG
– сохранить текущие значения ключей /R и /W в реестр как стандартные, для будущих вызовов robocopy. -
/TEE
– разделение вывода работы команды и в лог файл, и в консоль. При фоновом вызове robocopy (например, из планировщика задача) этот параметр можно убрать, оставив только /LOG -
/LOG
– путь к файлу лога
Обратите внимание на ключ /Z даже если вы копируете небольшие файлы по устойчивому каналу. Он не несёт дополнительных расходов при использовании, но в случае обрыва, вы сможете продолжить копирование просто повторно запустив скрипт.
При копировании больших файлов (более 2 Гб) с некоторых iSCSI/SAN томов, процесс robocopy может существенно использовать оперативную память сервера. Проблем обычно связано с тем, что для данного LUN в настройках RAID используется write-through кэширование вместо write-back.
Инкрементальное копирование с помощью robocopy
Сам по себе robocopy не может полностью обеспечить инкрементальное резервное копирование каталога (копирование новых и измененных файлов), для этого мы будем использовать небольшой bat скрипт:
@echo off set date_=%date:/=-% set source=C:source set dest=\testnode2C$dest%date_% mkdir %dest% robocopy "%source%" "%dest%" /maxage:1 /E /COPYALL /Z /B /J /R:3 /W:1 /REG /LOG+: /LOG+:%appdata%robocopy.log @echo on
-
set date_=%date:/=-%
— эта строчка присваивает значение переменной date_ в формате DD.MM.YYYY -
/maxage:1
— Максимальный возраст файла. Исключает файлы старше N дней или даты. Дата указывается в формате YYMMDD, например, /maxage:20200421 -
/E
– копирует подпапки, без ограничения уровня вложенности. Для контроля уровня вложенности директорий можно использовать параметр /lev, например, /lev:3
Инкрементальность осуществляется за счёт параметра /maxage:1 — файлы старше суток копироваться не будут. Для первого, “базового” копирования, можно выполнить этот скрипт без параметра /maxage.
Заметка. Если файловые системы source или dest не являются NTFS, используйте ключ
/FFT
, так как на других файловых системах (включая эмулированные NTFS) может возникнуть ошибка, из-за которой robocopy будет видеть старые файлы как измененные, из-за отличий в метке времени.
Robocopy: перемещение файлов
С помощью ключа
/mov
или
/move
вы можете переместить файлы (а точнее удалить успешно скопированные файлы из исходной директории):
robocopy C:source F:dest /MOVE /E /COPYALL /Z /B /J /R:3 /W:1 /REG /TEE /LOG+:%appdata%robocopy.log
-
/MOVE
– удалить файлы и директории из исходной папки, после того как они были скопированы. Имейте в виду, что этот ключ нужно использовать вместе с /E или /S, в противном случае вы перенесете только файлы, но не директории. Если вы хотите перенести только файлы, используйте ключ /MOV
Примечание. Поведение robocopy при использовании ключей
/MOVE
и
/MOV
не интуитивно.
- Если вы используете ключ /MOVE с ключом /E, то вы перенесете все файлы, директории (включая файлы внутри них) и пустые директории. Файлы и директории удалятся из исходной папки. /MOVE с /S даст такой же результат, но пустые директории не перенесутся и будут удалены.
- Если вы используете ключ /MOV с ключом /E, то вы перенесете все файлы, включая те, которые находятся в директориях и поддиректориях, также скопируются все директории (включая пустые), но они не будут удалены из исходного каталога, в отличие от файлов. Используя /MOV с /S, вы получите такой же результат, но пустые директории не будут скопированы.
Пример использование robocopy в планировщике задач
Для примера возьмём задачу: нам необходимо с помощью robocopy регулярно синхронизировать содержимое сетевой папки между двумя серверами с ведением логов.
- Исходный путь — \testnode1C$source
- Целевая директория- \testnode2C$source
Запустите командную строку с правами администратора и введите: compmgmt.msc
Перейдите в System Tools -> Task Scheduler Library. Создайте новое задание планировщика (Create task).
Укажите имя задания, и выберите пользователя из-под которого будет выполняться задание. Пользователь должен иметь доступ на чтению и запись в обоих каталогах (при копировании по сети между серверами домена можно использовать аккаунт System, в этом случае нужно предоставить на целевой каталог права RW для объекта computer сервера-источника) .
Выберите опцию Run whether user is logged on or not, для того чтобы задание выполнялось в фоновом режиме. Также отметьте Run with highest privileges. Эта опция сработает если аккаунт из-под которого выполняется задание, будет иметь права администратора.
Перейдите на вкладку Triggers и создайте новый триггер.
Выберите параметр On a schedule (по расписанию), выберите время начала и отметьте Repeat task every, указав интервал выполнения. В моём случае это 5 минут – каждые 5 минут, начиная с часа дня 22 апреля (обязательно измените эту дату на ту, которая нужна вам), директории будут синхронизированы. В for a duration of поставьте Indefinitely (бесконечно)
Перейдите во вкладку Actions и нажмите New…
Выберите Start a program, и укажите путь к .bat скрипту.
Содержание robocopy-mirror.bat:
@echo off robocopy \testnode1C$source \testnode2c$dest /MIR /COPYALL /Z /B /J /R:3 /W:1 /REG /LOG+:C:robocopy.log @echo on
Помимо журнала выполнения задания планировщика, robocopy будет писать собственный лог файл копирования в C:robocopy.log. Если аккаунт из-под которого будет выполняться скрипт не имеет прав администратора, смените C:robocopy.log на нужный вам путь.
Остальные настройки заполнять не надо. После нажатия на кнопку ОК, вас попросит ввести пароль от учетной записи, которую вы выбрали для запуска задания.
Если вы всё настроили правильно, директории должны начать синхронизироваться.
Если у вас возникли проблемы с выполнением скрипта, то обязательно проверьте вкладку History вашей задачи
Отслеживание изменений в каталогах с помощью robocopy
В robocopy есть встроенный механизм отслеживания изменений в исходном каталоге (и их последующего копирования) и встроенный планировщик – параметры
/mon
и
/mot
.
-
/mon:N
– проверяет исходную директорию на предмет изменений каждую 1 минуту, и если изменений в директории больше чем N, то будет произведено копирование в целевую директорию. Если задан параметр /mot:Y, то изменения будут проверяться каждые Y минут. -
/mot:N
– проверяет исходную директорию на предмет изменений каждые N минут. Минимальное значение N = 1, в минутах. Если параметр /mon не задан, то будет считаться что /mon:1
.bat скрипт для зеркалирования с отслеживанием изменений с интервалом в 1 минуту. Этот скрипт нужно запускать из-под аккаунта с правами администратора.
@echo off robocopy \testnode1C$source \testnode2c$dest /MIR /COPYALL /Z /B /J /R:3 /W:1 /REG /LOG+:%appdata%robocopy.log /mon:1 /mot:1
Плюсы:
- Не нужно создавать задание в планировщике задач
- Подходит для непостоянного выполнения. Например, в течение нескольких часов, в таком случае запустить скрипт руками через CMD проще, чем создавать задание в планировщике
Минусы:
- Чтобы запустить .bat скрипт в фоновом режиме, нужно либо использовать VBS скрипт, либо стороннее ПО, например, NirCmd.
- Минимальный интервал поиска изменений и копирования – 1 минута. Для меньшего интервала нужно использовать PowerShell или bat скрипт.
Коды возврата (ошибки) robocopy
Ниже приведены стандартные коды возврата robocopy, которые можно использовать для обработки различных ошибок, которые возвращает утилита после выполнения действия копирования (кот возврата эта битовая маска).
| Hex | Decimal | Meaning if set |
| 0x00 | 0 | No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized. |
| 0x01 | 1 | One or more files were copied successfully (that is, new files have arrived). |
| 0x02 | 2 | Some Extra files or directories were detected. No files were copied Examine the output log for details. |
| 0x04 | 4 | Some Mismatched files or directories were detected. Examine the output log. Housekeeping might be required. |
| 0x08 | 8 | Some files or directories could not be copied (copy errors occurred and the retry limit was exceeded). Check these errors further. |
| 0x10 | 16 | Serious error. Robocopy did not copy any files. Either a usage error or an error due to insufficient access privileges on the source or destination directories. |
| Коды возврата могут комбинироваться: | ||
| 0x03 | 3 | (2+1) Some files were copied. Additional files were present. No failure was encountered. |
| 0x05 | 5 | (4+1) Some files were copied. Some files were mismatched. No failure was encountered. |
| 0x06 | 6 | (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered. This means that the files already exist in the destination directory |
| 0x07 | 7 | (4+1+2) Files were copied, a file mismatch was present, and additional files were present. |
Любое значение больше 7 говорит о том, что при копировании через robocopy возникла ошибка. Вы можете обрабатывать эти ошибки в bat файле:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:end
Утилита robocopy имеет огромный функционал и позволяет гибко настроить операции копирования. Как альтернативу robocopy в PowerShell можно использовать командлет Copy-Item, который хоть и менее функционален, но работает с объектной моделью PowerShell, что может быть важно, если вы часто используете PowerShell или используете цепочки автоматизации с другими языками программирования.
Обновлено 21.08.2020
Доброе времени суток. Уважаемые читатели и гости, крупного IT блога Pyatilistnik.org, занимающего в рейтинге Яндекс.Радар 2500 место, среди всех сайтов России. В прошлый раз, мы с вами решили проблему со сбоем запроса устройства. Сегодня я не хочу рассматривать новые ошибки, а поделюсь своим опытом использования утилиты Robocopy, приведу примеры использования, поговорю о параметрах утилиты и покажу, как у Robocopy использовать графический интерфейс (GUI). Данной программкой просто обязан пользоваться каждый системный администратор, ну или хотя бы знать. о ее существовании, лично у меня она находится на почетном месте в моем наборе системного инженера.
Что такое robocopy (Robust File Copy Utility)
Утилита Robocopy (Robust File Copy Utility) — это специализированное средство, в задачи которого входит тонкая настройка процесса копирования, синхронизации, удаления и переноса файлов и папок, между дисками компьютера, компьютерами, сетевыми шарами и лесами, с сохранением атрибутов, прав разрешений и многое другое.
Robocopy за счет своих алгоритмов и многопоточности позволяет проводить копирование или синхронизацию одних файловых ресурсов с другими в десятки раз быстрее, чем обычное копирование средствами проводника Windows.
Данное средство, очень часто используется в задачах системного администратора, по переносу сетевых шар и файловых ресурсов, и в сценариях синхронизации данных.
Если обратиться к Википедии (https://ru.wikipedia.org/wiki/Robocopy), то там вы обнаружите, что она создавалась как средство репликации и шла в составе такого известного комплекса инструментов, как Windows Resource Kit.
Версии утилиты Robocopy
Первая версия robocopy появилась в 1997 году в составе инструментов Windows Resource Kit. На текущий момент самой свежей версией является 10.0.17763.1 входящей в состав Windows 10 1809, табличку в Википедии я подправил (https://en.wikipedia.org/wiki/Robocopy)
Где лежит Robocopy в системе?
Основной исполняемый файл Robocopy.exe располагается по пути C:WindowsSystem32. Утилита очень компактная и весит всего 132 килобайта, но это не уменьшает ее мощи и функционала.
Где скачать утилиту Windows Robocopy
Начиная с Windows 7, данная программулька является ее составной частью, и я уже выше показал, что она лежит в папке C:WindowsSystem32, если по каким-то причинам у вас в ней нет файла robocopy.exe, то у вас есть несколько вариантов его скачать.
- Первый вариант, это скопировать его из другой системы
- Второй вариант, это загрузить средство Windows Server 2003 Resource Kit Tools по ссылке (https://www.microsoft.com/en-us/download/details.aspx?id=17657). В состав этого пакета входит утилита Robust File Copy Utility.
Далее полученный файла robocopy, вам необходимо разархивировать данный файл, для этого у вас должен быть архиватор winrar или 7-zip. Через правый клик извлекаем его содержимое.
Далее 7-Zip-ом распаковываем msi пакет rktools.msi.
Перейдите в папку rktools, там вас будет ждать файл robocopy.exe, который вы можете скачать куда угодно.
Возможности утилиты Robocopy (Robust File Copy Utility)
И так давайте разбираться, какими функциональными возможностями обладает данная утилита. Как я и писал выше Robocopy умеет:
- Производить копирование файлов и папок
- Производить синхронизацию файлов и папок
- Копировать по расширениям файлов
- Переносить права на папки и файлы
- Копирование и перенос файлов по датам и за нужный период
- Удалять файлы и папки
Чтобы посмотреть все ключи и их назначение, нам нужно открыть командную строку, желательно от имени администратора и ввести команду:
У вас появится небольшая справка, в которой вам отобразят конструкцию построения команд и несколько примеров реализации. Чтобы вывести все доступные параметры Robocopy вам необходимо ввести команду:
Тут ключи и параметры будут разбиты на несколько подкатегорий:
- Параметры копирования
- /COPY:флаги копирования
- /DCOPY:флаги копирования
- Параметры выбора файлов
- Параметры повторных попыток
- Параметры ведения журнала
- Параметры задания
- Комментарии
Ключи параметров копирования:
- /S — данный параметр позволит вам произвести копирование вложенных папок, за исключением пустых. Очень удобно, чтобы не перетаскивать не используемые каталоги
- /E — данный ключ, альтернатива параметру /S, так как он позволит скопировать вложенные папки, в том числе и пустые.
- /LEV:n — данный параметр копирования Robocopy позволит вам скопировать n-число уровней у текущего каталога папок. Предположим у вас есть папка, которая включает в себя еще 10 подпапок, задав n равное 5, вы скопируете структуру, только первых пяти верхних каталогов, а все, что ниже не будет затронуто.
- /Z — параметр позволяет возобновлять копирование в случае какого-то сбоя
- /B — Копирование файлов в режиме архивирования.
- /ZB — совмещение параметров Robocopy.exe, в данном случае вначале будет использоваться режим с возобновлением, но если доступа к каким либо файлам не будет, то утилита переключиться в режим архивации.
- /J — данный параметр Robocopy.exe используется при копировании крупного размера файлов, где применяется небуферезированный ввод-вывод
- /EFSRAW — будет произведено копирование всех зашифрованных файлов в режиме EFS RAW
Ключи /COPY:флаги копирования
Ключ /COPY это один из базовых ключей, который вы будите применять в своих сценариях синхронизации или копирования, он переносит (Флаги копирования: D=Данные, A=Атрибуты, T=Метки времени). (S=Безопасность=NTFS ACLs, O=Сведения о владельце, U=Сведения аудита)
- /SEC — данный флаг позволит вам скопировать файлы и каталоги вместе с их параметрами безопасности (эквивалентно /COPY:DATS)
- /COPYALL — данный ключ скажет утилите Robocopy.exe, что нужно при копировании перенести все сведения о файле (Аналог /COPY:DATSOU)
- /NOCOPY — данный ключ скажет, что не нужно копировать никаких сведений о файле (полезно с параметром /PURGE).
- /SECFIX — данный ключ будет полезен при синхронизации, когда нужно перезаписать и исправить параметры безопасности на всех папках и файлах. Простой пример, вы сделали первое копирование одного каталога с файлами в другой, и перенесли параметры безопасности (NTFS), в какой-то момент в исходном каталоге у вас поменялись разрешения на некоторые файлы, и если вы произведете синхронизацию, без этого ключа, то эти новые права доступа не перенесутся в новое место, поставив ключ /SECFIX, вы этого избежите и все будет обновлено.
- /TIMFIX — этот флаг позволит исправить атрибуты времени у всех файлов, в том числе и пропущенных
- /PURGE — позволит удалить каталоги и файлы в папке назначения, которые уже не существуют в источнике.
- /MIR — в данном случае будет создана полная копия (зеркальная) источника в назначении, аналогично выполнению Robocopy.exe с ключами /E /PURGE
- /MOV — данный ключ позволит перемещать файлы (удаление из источника после копирования, я бы назвал это аналогов вырезать в Windows)
- /MOVE — похоже на ключ /MOV, но уже вырезаться будут файлы с папками.
- /A+:[RASHCNET] — данный флаг позволяет вам добавлять атрибуты к скопированным файлам
- /A-:[RASHCNET] — данный флаг сообщает утилите Robocopy, что нужно удалить заданные атрибуты у скопированных файлов
- /CREATE — данный флаг создает дерево каталогов и файлы нулевой длины
- /FAT — Создать файлы назначения только в формате 8.3 FAT
- /256 — отключает поддерживание длинных путей свыше 256 знаков, на практике не встречал таких сценариев.
- /MON:n — robocopy в данным флагом в параметрах, будет производить мониторинг источника, и перезапустит выполнение после n изменений
- /MOT:m — Наблюдать за источником; перезапустить через m минут, если произошли изменения.
- /RH:hhmm-hhmm — тут вы говорите для Robocopy.exe в какое время нужно производить запуск, в какой момент будет запущено задание копирования файлов.
- /PF — Проверять часы запуска по файлам (не по проходам)
- /IPG:n — данный ключ поможет снизить нагрузку на сеть, когда у вас не очень хороший канал, n интервал задержки в миллисекундах.
- /SL — копирует сами символические ссылки, за место копирования целевых объектов, на которые эти селинки ссылаются.
- /MT[:n] — использование многопотокового режима, позволяет существенно увеличить скорость копирования, за счет использования процессорных моoностей системы. n может иметь значение от 1 до 128 потоков. Нельзя использовать с параметрами /IPG и /EFSRAW. Для повышения производительности перенаправьте вывод с помощью параметра /LOG.
Ключи /DCOPY:флаги копирования
Данный раздел флагов отвечает за то, что копировать для каталогов (D=Данные, A=Атрибуты, T=Метки времени)
- /NODCOPY — не производить копирование любых сведений о каталоге
- /NOOFFLOAD — Robocopy будет копировать файлы без использования механизма разгрузки копий Windows
Параметры выбора файлов
Утилита Robocopy очень тонко позволяет производить тонкую фильтрацию файлов при копировании, для этого есть огромное количество ключей и флагов.
- /A — флаг задает копирование файлов с атрибутом «Архивный»
- /M — задает копирование файлов с атрибутом «Архивный» и потом его сбросить на конечной стороне
- /IA:[RASHCNETO] — переносить файлы на которых установлены заданные атрибуты (объявленные заранее)
- /XA:[RASHCNETO] — при копирование будут исключены файлы с объявленными атрибутами
- /XF file [файл] — позволяет исключать файлы, у которых заданные имена, пути и подстановочные знаки
- /XD dirs [папки] — исключает каталоги, с заданными именами и путями
- /XC — robocopy не копирует измененные файлы
- /XN — исключить более поздние файлы
- /XO — Исключить более ранние файлы
- /XX — Исключить дополнительные файлы и папки
- /XL — Исключить отдельно расположенные файлы и папки
- /IS — Включить те же файлы
- /IT — Включить оптимизированные файлы
- /MAX:n — Robust File Copy Utility исключит файлы, у которых размер более n-байт, можно это назвать максимальным размеров копируемых файлов
- /MIN:n — данный параметр Robocopy установит минимальный размер копируемого файла, позволит исключить файлы у которых n-байт меньше заданного
- /MAXAGE:n — тут мы задаем максимальный возраст файлов. Мы исключим при копировании файлы, у которых возраст больше n дней
- /MINAGE:n — тут мы задаем минимальный возраст файлов. Мы исключим при копировании файлы, у которых возраст меньше n дней
- /MAXLAD:n — Наиболее поздняя дата последнего обращения. Будут скопированы данные, которые не использовались с даты n
- /MINLAD:n — Наиболее ранняя дата последнего обращения. Robocopy исключит файлы, которые были использованы после даты указанной в n. (Если n < 1900, то n = n дней, в противном случае n — дата в формате ДД.ММ.ГГГГ)
- /XJ — отключение точек соединения, которые по умолчанию включаются
- /FFT — Использовать время файлов FAT (двухсекундная точность)
- /DST — Тут задается. будет ли Robocopy учитывать одно часовую разницу при переходе на летнее время
- /XJD — Исключить точки соединения для папок
- /XJF — Исключить точки соединения для файлов
Ключи параметров повторных попыток
- /R:n — Число повторных попыток для неудавшихся копий, по умолчанию — 1 миллион.
- /W:n — Тут вы зададите период ожидания между повторными попытками: по умолчанию это 30 секунд.
- /REG — Сохранить /R:n и /W:n в реестре как параметры по умолчанию.
- /TBD — Ждать, пока будут определены имена общих ресурсов (ошибка повторной попытки 67).
Ключи параметров ведения журнала
- /L — получить только список, в данном случае Robust File Copy Utility файлы не копирует, не удаляет, не помечается метками времени.
- /X — Сообщать обо всех дополнительных файлах, а не только о выбранных.
- /V — Подробный вывод с указанием пропущенных файлов.
- /TS — Включать в вывод меток времени исходных файлов.
- /FP — Включать в вывод полные пути файлов.
- /BYTES — Печатать размеры файлов в байтах.
- /NS — Режим без размера, у вас не будет заноситься информация, о размерах файлов в журнал.
- /NC — Режим без класса, не заносить в журнал классы файлов.
- /NFL — Режим без списка файлов, не заносить в журнал имена файлов.
- /NDL — Режим без списка папок, не заносить в журнал имена папок.
- /NP — Режим без хода процесса, не отображать число скопированных процентов.
- /ETA — Показывать оценку времени окончания копирования файлов.
- /LOG:файл — Производить запись состояния в файл журнала (перезаписывать существующий журнал).
- /LOG+:файл — Производить запись состояния в файл журнала (добавлять к существующему журналу).
- /UNILOG:файл — Производить запись состояния в файл журнала в формате Юникод (перезаписывать существующий журнал).
- /UNILOG+:файл — Производить запись состояния в файл журнала в формате Юникод (добавлять к существующему журналу).
- /TEE — Направлять выходные данные в окно консоли и в файл журнала.
- /NJH — Без заголовка задания.
- /NJS — Без сведений о задании.
- /UNICODE — Состояние вывода в формате Юникод.
Ключи параметров задания
- /JOB:имя_задания — Взять параметры из указанного файла задания.
- /SAVE:имя_задания — Сохранить параметры в указанный файл задания
- /QUIT — Выйти после обработки командной строки (для просмотра параметров).
- /NOSD — Не указывается исходная папка.
- /NODD — Не указывается папка назначения.
- /IF — Включить следующие файлы.
Как видите у утилиты Robocopy много параметров и ключей, и я рад, что Microsoft не забросила свою полезную программку, которую я полюбил еще в Windows Server 2003 Resource Kit Tools.
Более подробно почитать, о параметрах Robocopy вы можете почитать на сайте Microsoft (https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc733145(v=ws.10))
Варианты и примеры использования на практике
Теперь когда мы с вами разобрали параметры Robocopy, остается научиться их использовать и применять в ваших сценариях. Сценариев может быть огромное количество. например:
- Нужно скопировать только измененные файлы
- Нужно скопировать только новые файлы
- Нужно скопировать только папки или файлы с определенным расширением, например, PDF
- Нужно копировать файлы из локального расположения в сетевое
Самый простой пример использования Robocopy, это простое копирование одного каталога в другой в рамках одного диска. Предположим мне нужно продублировать содержимое папки C:Temp в C:Test_robocopy
В командной строке пишем вот такую команду
robocopy C:Temp C:Test_robocopy /E
Напоминаю параметр /E копирует файлы и папки, в том числе и пустые. Сам процесс выглядит поэтапным копированием в один поток файлов.
По окончании выполнения команды вы увидите сводную таблицу, в которой будет статистика по каталогам, файлам, времени, пропущенным файлам и скорости.
Но при таком использовании robocopy, вы на каталоге назначения получите файлы с уже другими правами на них. Видно это в свойствах.
Чтобы скопировать и исправить на файлах в каталоге назначения все права доступа (перезаписав текущие и подставив туда из источника), вам необходимо выполнить вот такую команду:
robocopy C:Temp C:Test_robocopy /E /COPYALL /SECFIX
Ключ /COPYALL переносит все сведения о файле, а параметр этого ключа /SECFIX исправит все сведения на вкладке «Безопасность».
Если у вас не перенеслись новые права на файлы, то со 100% вероятностью у вас консоль cmd в которой вы запускаете сценарии Robocopy, работает не от имени администратора, старайтесь всегда делать из под данного режима
Напомню, что есть ключ /MIR параметра robocopy, он делает зеркальную копию каталогов, вот его пример использования:
robocopy C:Temp C:Test_robocopy /MIR /Z
В момент такого зеркального копирования, утилита Robust File Copy Utility, сделает на конечной стороне полную копию источника, и со всеми списками доступа (ALC) на вкладке безопасности, так же будут перенесены все атрибуты данных. При повторном запуске, будут перенесены, только изменения.
Чтобы осуществить перенос данных на сетевую шару, вы можете использовать вот такую конструкцию:
При простом копировании robocopy C:Temp \c-10-5210Test_robocopy /E
Тот же пример с синхронизацией прав robocopy C:Temp \c-10-5210Test_robocopy /E /COPYALL /SECFIX
Ну и пример использования при зеркалировании каталоговrobocopy C:Temp \c-10-5210Test_robocopy /MIR /Z
Теперь представим задачу, что вам необходимо скопировать файлы, которые были изменены за последние 5 дней, выполняем вот такую команду:
robocopy C:Temp \c-10-5210Test_robocopy /MAXAGE:5
Если нужно исключить сегодняшний день, то нужно добавить ключик /MINAGE:1
robocopy C:Temp \c-10-5210Test_robocopy /MAXAGE:5 /MINAGE:1
Если стоит задача скопировать файлы и исключить из все, возраст которых меньше 1 день, то будет выглядеть вот так:
robocopy C:Temp \c-10-5210Test_robocopy /MINAGE:1
Вот вам пример использования Robocopy, где происходит вырезание файлов в источнике и перенос их в каталог назначения, со всеми правами и атрибутами на файл, вместо сетевого пути, может быть и локальный, как в первом примере.
Иногда может возникнуть задача, перенести все, кроме срытых файлов системы, для этого сценария Robust File Copy Utility имеет ключ /XA:H
robocopy C:Temp C:Test_robocopy /E /XA:H
Можно переносить файлы с пометкой «Только для чтения», через такую структуру
Копирование данных только с определенными форматами, например, exe и mp3, и не копировать пустые папки.
robocopy C:Temp C:Test_robocopy *.exe *.mp3 /S
Также можно делать выборку по размеру файлов, например, мне нужно скопировать, все, что больше 100 килобайт и меньше 100 мегабайт.
robocopy C:Temp C:Test_robocopy /E /MAX:102400000 /MIN:102400
При копировании данных можно исключить не нужные вам каталоги, вот пример команды, где исключается папка CrystalDiskMarkPortable:
robocopy C:Temp C:Test_robocopy /MIR /XA:SH /XD CrystalDiskMarkPortable /XJD
Что еще полезного умеет Robocopy, например, автоматическое копирование папок по расписанию да и еще не в один поток. Что такое поток копирования, по сути когда вы в проводнике Windows, запускаете простое копирование, то у вас в диспетчере задач, появляется задача «Проводник», которая последовательно запускает процесс и перенос данных. Когда же Robocopy делает таких потоков больше, то у вас сам процесс идет в разы быстрее, но затрачиваются больше процессорных мощностей, но в виду того, что современные процессору зачастую не дозагружаются даже на 20-30%, то глупо было бы это не использовать, особенно с серверными CPU.
Вот примеры использования команд с заданием потоков, напоминаю, что их может быть от 1 до 128. Особенный прирост скорости вы ощутите в моменты, когда у вас будет огромное количество мелких файлов.
robocopy C:Temp \c-10-5210Test_robocopy /sec /E /Z /XO /R:3 /W:5 /MT:32
Если повторно запустить данную команду, то она будет копировать и синхронизировать только измененные файлы, так называемые дельты, очень удобно при актуализации каталогов, резервных копий
Еще полезной командой будет, когда вам нужно обновить только ACL (Вкладку безопасность на всех файлах, без их повторного копирования)
robocopy <source /> /secfix /xo /xn /xc
Ошибки работы Robocopy
У данной утилиты, конечно же могут возникать и проблемы, но чаще всего они не значительные и решаются очень просто, например вы можете встретить ошибку «ОШИБКА 5 (0x00000005) Копирование параметров безопасности NTFS для конечного файла». Данная ошибка гласит, что у вас не хватает прав на перенос параметров и прав на файлы, все дело в том, что ваша cmd-консоль запущена в режиме администратора.
Таблица кодов ошибок, которые появляются в Robocopy
Вот вам подробная, сводная таблица в которой отражены все коды ошибок от 0-8 в данной утилите и дано подробное описание в чем проблема. (Подробнее на https://support.microsoft.com/ru-ru/help/954404/return-codes-that-are-used-by-the-robocopy-utility-in-windows-server-2)
Автоматическое копирование папок по расписанию с Robocopy
Чем хороша данная утилита, так это тем, что с ее помощью можно писать скрипты и сценарии, например в том же PowerShell. Все выше описанные команды, вы можете поместить в текстовый файл (txt), затем сменить ему расширение на bat или cmd, чтобы он стал исполняемым и далее использовать его, либо в групповой политике, или же создать с помощью него задачу в «Планировщике заданий Windows», хотя можно и прямо в нем вписывать все ключи и параметры Robocopy. Про создание задач в планировщике заданий Windows читайте по ссылке. Обратите внимание, что ключи я вписываю в поле аргументы.
Примеры скриптов при резервном копировании или синхронизации. Предположим у вас есть рабочая папка и вы бы хотели ее синхронизировать с другой или сетевой шарой, как я и писал выше вы делаете исполняемый файл или создаете задание в планировщике, вот пример команды, которая перенесет файлы, будет их синхронизировать, перенесет все атрибуты и права, а так же будет их обновлять. Папка C:Test, это источник, а вот каталог \c-10-5210shareTest, уже назначения.
robocopy C:Test \c-10-5210shareTest /sec /E /Z /XO /SECFIX /R:3 /W:5 /MT:32
если по каким-то причинам вам нужно монтировать перед эти диск, то будет выглядеть вот так:
net use z: /delete
net use z: \c-10-5210share
robocopy C:Test Z: /sec /E /Z /XO /SECFIX /R:3 /W:5 /MT:32
На самом деле примеров использования Robocopy очень много, если будет чем поделиться, пишите в комментариях.
Графический (GUI) интерфейс в Robocopy
С примерами утилиты Robocopy мы ознакомились, теперь предлагаю вам посмотреть для нее графическую оболочку, которая как ни странно есть, и я узнал, о ее существовании буквально недавно. Называется она RoboCopy GUI Utility ver. 3.1, к сожалению она использует robocopy.exe не самой последней версии, но все работает и в Windows 10 1809.
Скачать RoboCopy GUI Utility ver. 3.1 можно с официального сайта https://docs.microsoft.com/en-us/previous-versions/technet-magazine/cc160891(v=msdn.10) или у меня по ссылке с mail облака
После загрузки RoboCopy GUI Utility ver. 3.1, нам его необходимо установить. Запускаем исполняемый файл. Соглашаемся с лицензионным соглашением.
Утилита вам предложит указать каталог куда будут извлечены файлы.
Соглашаемся с извлечением.
В итоге вы получите вот такую структуру файлов. Запускаем setup.exe.
У вас появится тривиальный мастер установки GUI интерфейса для Robocopy. Нажимаем next.
Принимаем лицензионное соглашение «I gree»
Указываете будет ли утилита устанавливаться только для вас или для всех.
next.
Установка графического интерфейса для Robocopy завершено.
У вас на рабочем столе появится ярлык Microsoft Robocopy GUI. Запускаем его и посмотрим, что из себя представляет эта утилита.
Обзор RoboCopy GUI Utility ver. 3.1
Давайте я бегло покажу, что из себя представляет данная программа. Сам графический интерфейс очень простой, так и должно быть. На первой вкладке вы увидите два действия:
- Первое, это нужно через «Source Path выбрать, что мы будем копировать»
- Второе действие, это в «Target Path мы задаем, куда мы будем переносить данные, при желании вы можете смонтировать сетевой диск, через пункт «Map Drive»»
На вкладке «Copy Options», вы увидите уже знакомые параметры использования Robocopy, тут есть и ключи /SEC для переноса прав и команда /MOVE, которую мы применяли для вырезания файлов и многое другое. Тут же вы задаете количество потоков копирования.
Вкладка «Drive Mapping» поможет присоединить сетевой диск, тут вы указываете ip-адрес или DNS имя сервера, и учетные данные для подключения.
Вкладка «Filters» позволит вам указать, что именно нужно переносить и сделать фильтрацию, например, не переносить файлы длина которых в имени составляет более 256 символов, или только txt файлы.
Вкладка «Logging» задает параметры ведения логирования вашего задания.
Вкладка «Monitoring Options» будет полезна для наблюдения за источником копирования, в случае проблем, все можно идентифицировать и перезапустить.
Аналоги утилиты Robocopy
Robust File Copy Utility не единственная утилита, которая позволяет копировать файлы, каталоги с атрибутами и правами, ее аналогами можно назвать утилиты:
- Total Commander
- icacls
- Xcopy
- Far
- Rsync
Вот такая вот полезная и богатая функционалом утилита Robust File Copy Utility или Robocopy.exe, надеюсь, что данный материал был для вас полезен и вы им поделитесь в социальных сетях. А с вами был Семин Иван, автор и создатель IT блога Pyatilistnik.org.
- SS64
- CMD
- How-to
The return code from Robocopy.exe is a bitmap, defined as follows:
Error Meaning if set
0 No errors occurred, and no copying was done.
The source and destination directory trees are completely synchronized.
1 One or more files were copied successfully (that is, new files have arrived).
2 Some Extra files or directories were detected. No files were copied
Examine the output log for details.
4 Some Mismatched files or directories were detected.
Examine the output log. Housekeeping might be required.
8 Some files or directories could not be copied
(copy errors occurred and the retry limit was exceeded).
Check these errors further.
16 Serious error. Robocopy did not copy any files.
Either a usage error or an error due to insufficient access privileges
on the source or destination directories.
These can be combined, giving a few extra exit codes:
3 (2+1) Some files were copied. Additional files were present. No failure was encountered.
5 (4+1) Some files were copied. Some files were mismatched. No failure was encountered.
6 (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered.
This means that the files already exist in the destination directory
7 (4+1+2) Files were copied, a file mismatch was present, and additional files were present.
An Exit Code of 0-7 is success and any value >= 8 indicates that there was at least one failure during the copy operation.
Many deployment tools like SCCM will default to assuming any Exit Code greater than 0 is an error.
You can use this in a batch file to report anomalies, as follows:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:end
To capture the exit code of a non-powerShell process, wait for the process to finish (-wait) and then select the Exitcode:
$exitCode = (Start-Process -FilePath ‘robocopy’ -ArgumentList ‘options‘ -PassThru -Wait).ExitCode
PowerShell also has an automatic $lastexitcode variable which may contain the same thing.
Error 0x800700DF: The file size exceeds the limit allowed and cannot be saved.
This error may appear when copying from a WEBdav drive, WEBdav ignores the robocopy/MAX setting.
See Q2668751 for WebDAV size/time limits (default=50 MB/30 minutes).
Examples
Copy files from one server to another
ROBOCOPY \Server1reports \Server2backup *.*
IF %ERRORLEVEL% LSS 8 goto finish
Echo Something failed & goto :eof
:finish
Echo All done, no fatal errors.
Bugs
Version XP026 returns a success errorlevel even when it fails.
“Few men of action have been able to make a graceful exit at the appropriate time” ~ Malcolm Muggeridge
Related commands
Robocopy — Robust File and Folder Copy.
HowTo: Error Handling in a batch file
HowTo: Errorlevel — Errorlevel and Exit codes.
Q954404 — Robocopy Return codes in Windows 2008 R2.
Copy Open files — with VShadow.exe (Shadow copies).
Equivalent bash command: rsync — Remote file copy (Synchronize file trees).
Copyright © 1999-2023 SS64.com
Some rights reserved
Есть у микрософта бледное подобие rsync-a, называется robocopy — robust file copy.
Ну, особо придраться не к чему — бледное подобие оно и есть бледное подобие. Но поскольку микрософт уверен, что все серверы в мире подключены к интернету и не поставляет оффлайновую справку, то лучше подстраховаться и кое-что из документации вынести в блог.
Коды завершения работы:
(кто-то вроде меня так же ведет блог, записывая туда свои «открытия», чтобы не искать их повторно)
Использована информация из базы знаний микрософта. У микрософта информация по комбинациям кодов немного полнее.
===
ROBOCOPY Exit Codes
The return code from Robocopy is a bitmap, defined as follows:
Hex Decimal Meaning if set
0×00 0 No errors occurred, and no copying was done.
The source and destination directory trees are completely synchronized.
0×01 1 One or more files were copied successfully (that is, new files have arrived).
0×02 2 Some Extra files or directories were detected. No files were copied
Examine the output log for details.
0×04 4 Some Mismatched files or directories were detected.
Examine the output log. Housekeeping might be required.
0×08 8 Some files or directories could not be copied
(copy errors occurred and the retry limit was exceeded).
Check these errors further.
0×10 16 Serious error. Robocopy did not copy any files.
Either a usage error or an error due to insufficient access privileges
on the source or destination directories.
These can be combined, giving a few extra exit codes:
0×03 3 (2+1) Some files were copied. Additional files were present. No failure was encountered.
0×05 5 (4+1) Some files were copied. Some files were mismatched. No failure was encountered.
0×06 6 (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered.
This means that the files already exist in the destination directory
0×07 7 (4+1+2) Files were copied, a file mismatch was present, and additional files were present.
Any value greater than 7 indicates that there was at least one failure during the copy operation.
You can use this in a batch file to report anomalies, as follows:
if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:end
Example:
Copy files from one server to another
ROBOCOPY \Server1reports \Server2backup *.*
IF %ERRORLEVEL% LSS 8 goto finish
Echo Something failed & goto :eof
:finish
Echo All done, no fatal errors.
Bugs
Version XP026 returns a success errorlevel even when it fails.
“Few men of action have been able to make a graceful exit at the appropriate time” ~ Malcolm Muggeridge
===
| title | description | ms.topic | ms.assetid | author | ms.author | ms.date |
|---|---|---|---|---|---|---|
|
robocopy |
Reference article for the robocopy command, which copies file data from one location to another. |
reference |
d4c6e8e9-fcb3-4a4a-9d04-2d8c367b6354 |
xelu86 |
wscontent |
05/31/2023 |
Copies file data from one location to another.
Syntax
robocopy <source> <destination> [<file>[ ...]] [<options>]
For example, to copy a file named yearly-report.mov from c:reports to a file share \marketingvideos while enabling multi-threading for higher performance (with the /mt parameter) and the ability to restart the transfer in case it’s interrupted (with the /z parameter), type:
robocopy c:reports "\marketingvideos" yearly-report.mov /mt /z
[!IMPORTANT]
If any data is copied from the root of a device, the destination directory will adopt the «hidden» attribute during the copy process.
Parameters
| Parameter | Description |
|---|---|
<source> |
Specifies the path to the source directory. |
<destination> |
Specifies the path to the destination directory. |
<file> |
Specifies the file or files to be copied. Wildcard characters (* or ?) are supported. If you don’t specify this parameter, *.* is used as the default value. |
<options> |
Specifies the options to use with the robocopy command, including copy, file, retry, logging, and job options. |
Copy options
| Option | Description |
|---|---|
| /s | Copies subdirectories. This option automatically excludes empty directories. |
| /e | Copies subdirectories. This option automatically includes empty directories. |
/lev:<n> |
Copies only the top n levels of the source directory tree. |
| /z | Copies files in restartable mode. In restartable mode, should a file copy be interrupted, Robocopy can pick up where it left off rather than recopying the entire file. |
| /b | Copies files in backup mode allowing Robocopy to override file and folder permission settings (ACLs). This allow copying of files you might otherwise not have access to assuming it’s being run under an account with sufficient privileges. |
| /zb | Copies files in restartable mode. If file access is denied, switches to backup mode. |
| /j | Copies using unbuffered I/O (recommended for large files). |
| /efsraw | Copies all encrypted files in EFS RAW mode. |
/copy:<copyflags> |
Specifies which file properties to copy. The valid values for this option are:
The default value for the /COPY option is DAT (data, attributes, and time stamps). The X flag is ignored if either /B or /ZB is used. |
/dcopy:<copyflags> |
Specifies what to copy in directories. The valid values for this option are:
The default value for this option is DA (data and attributes). |
| /sec | Copies files with security (equivalent to /copy:DATS). |
| /copyall | Copies all file information (equivalent to /copy:DATSOU). |
| /nocopy | Copies no file information (useful with /purge). |
| /secfix | Fixes file security on all files, even skipped ones. |
| /timfix | Fixes file times on all files, even skipped ones. |
| /purge | Deletes destination files and directories that no longer exist in the source. Using this option with the /e option and a destination directory, allows the destination directory security settings to not be overwritten. |
| /mir | Mirrors a directory tree (equivalent to /e plus /purge). Using this option with the /e option and a destination directory, overwrites the destination directory security settings. |
| /mov | Moves files, and deletes them from the source after they’re copied. |
| /move | Moves files and directories, and deletes them from the source after they’re copied. |
| /a+:[RASHCNET] | Adds the specified attributes to copied files. The valid values for this option are:
|
| /a-:[RASHCNETO] | Removes the specified attributes from copied files. The valid values for this option are:
|
| /create | Creates a directory tree and zero-length files only. |
| /fat | Creates destination files by using 8.3 character-length FAT file names only. |
| /256 | Turns off support for paths longer than 256 characters. |
/mon:<n> |
Monitors the source and runs again when more than n changes are detected. |
/mot:<m> |
Monitors the source and runs again in m minutes if changes are detected. |
| /rh:hhmm-hhmm | Specifies run times when new copies may be started. |
| /pf | Checks run times on a per-file (not per-pass) basis. |
/ipg:<n> |
Specifies the inter-packet gap to free bandwidth on slow lines. |
| /sj | Copies junctions (soft-links) to the destination path instead of link targets. |
| /sl | Don’t follow symbolic links and instead create a copy of the link. |
/mt:<n> |
Creates multi-threaded copies with n threads. n must be an integer between 1 and 128. The default value for n is 8. For better performance, redirect your output using /log option.
The /mt parameter can’t be used with the /ipg and /efsraw parameters. |
| /nodcopy | Copies no directory info (the default /dcopy:DA is done). |
| /nooffload | Copies files without using the Windows Copy Offload mechanism. |
| /compress | Requests network compression during file transfer, if applicable. |
| /sparse | Enables retaining sparse state during copy. |
[!IMPORTANT]
When using the /secfix copy option, specify the type of security information you want to copy, using one of these additional copy options:
- /copyall
- /copy:o
- /copy:s
- /copy:u
- /sec
[!NOTE]
The /mt parameter was introduced in Windows Server 2008 R2 and its functionality applies to current versions of Windows Server.
Copy file throttling options
| Option | Description |
|---|---|
/iomaxsize:<n>[kmg] |
The requested max i/o size per read/write cycle in n kilobytes, megabytes, or gigabytes. |
/iorate:<n>[kmg] |
The requested i/o rate in n kilobytes megabytes, or gigabytes per second. |
/threshold:<n>[kmg] |
The file size threshold for throttling in n kilobytes, megabytes, or gigabytes (see Remarks). |
File selection options
| Option | Description |
|---|---|
| /a | Copies only files for which the Archive attribute is set. |
| /m | Copies only files for which the Archive attribute is set, and resets the Archive attribute. |
/ia:[RASHCNETO] |
Includes only files for which any of the specified attributes are set. The valid values for this option are:
|
/xa:[RASHCNETO] |
Excludes files for which any of the specified attributes are set. The valid values for this option are:
|
/xf <filename>[ ...] |
Excludes files that match the specified names or paths. Wildcard characters (* and ?) are supported. |
/xd <directory>[ ...] |
Excludes directories that match the specified names and paths. |
| /xc | Excludes existing files with the same timestamp, but different file sizes. |
| /xn | Source directory files newer than the destination are excluded from the copy. |
| /xo | Source directory files older than the destination are excluded from the copy. |
| /xx | Excludes extra files and directories present in the destination but not the source. Excluding extra files won’t delete files from the destination. |
| /xl | Excludes «lonely» files and directories present in the source but not the destination. Excluding lonely files prevents any new files from being added to the destination. |
| /im | Include modified files (differing change times). |
| /is | Includes the same files. Same files are identical in name, size, times, and all attributes. |
| /it | Includes «tweaked» files. Tweaked files have the same name, size, and times, but different attributes. |
/max:<n> |
Specifies the maximum file size (to exclude files bigger than n bytes). |
/min:<n> |
Specifies the minimum file size (to exclude files smaller than n bytes). |
/maxage:<n> |
Specifies the maximum file age (to exclude files older than n days or date). |
/minage:<n> |
Specifies the minimum file age (exclude files newer than n days or date). |
/maxlad:<n> |
Specifies the maximum last access date (excludes files unused since n). |
/minlad:<n> |
Specifies the minimum last access date (excludes files used since n) If n is less than 1900, n specifies the number of days. Otherwise, n specifies a date in the format YYYYMMDD. |
| /xj | Excludes junction points, which are normally included by default. |
| /fft | Assumes FAT file times (two-second precision). |
| /dst | Compensates for one-hour DST time differences. |
| /xjd | Excludes junction points for directories. |
| /xjf | Excludes junction points for files. |
Retry options
| Option | Description |
|---|---|
/r:<n> |
Specifies the number of retries on failed copies. The default value of n is 1,000,000 (one million retries). |
/w:<n> |
Specifies the wait time between retries, in seconds. The default value of n is 30 (wait time 30 seconds). |
| /reg | Saves the values specified in the /r and /w options as default settings in the registry. |
| /tbd | Specifies that the system waits for share names to be defined (retry error 67). |
| /lfsm | Operate in low free space mode that enables copy, pause and resume (see Remarks). |
/lfsm:<n>[kmg] |
Specifies the floor size in n kilobytes, megabytes, or gigabytes. |
Logging options
| Option | Description |
|---|---|
| /l | Specifies that files are to be listed only (and not copied, deleted, or time stamped). |
| /x | Reports all extra files, not just the ones that are selected. |
| /v | Produces verbose output, and shows all skipped files. |
| /ts | Includes source file time stamps in the output. |
| /fp | Includes the full path names of the files in the output. |
| /bytes | Prints sizes as bytes. |
| /ns | Specifies that file sizes are not to be logged. |
| /nc | Specifies that file classes are not to be logged. |
| /nfl | Specifies that file names are not to be logged. |
| /ndl | Specifies that directory names are not to be logged. |
| /np | Specifies that the progress of the copying operation (the number of files or directories copied so far) won’t be displayed. |
| /eta | Shows the estimated time of arrival (ETA) of the copied files. |
/log:<logfile> |
Writes the status output to the log file (overwrites the existing log file). |
/log+:<logfile> |
Writes the status output to the log file (appends the output to the existing log file). |
/unilog:<logfile> |
Writes the status output to the log file as unicode text (overwrites the existing log file). |
/unilog+:<logfile> |
Writes the status output to the log file as Unicode text (appends the output to the existing log file). |
| /tee | Writes the status output to the console window, and to the log file. |
| /njh | Specifies that there’s no job header. |
| /njs | Specifies that there’s no job summary. |
| /unicode | Displays the status output as unicode text. |
Job options
| Option | Description |
|---|---|
/job:<jobname> |
Specifies that parameters are to be derived from the named job file. To run /job:jobname, you must first run the /save:jobname parameter to create the job file. |
/save:<jobname> |
Specifies that parameters are to be saved to the named job file. This must be ran before running /job:jobname. All copy, retry, and logging options must be specified before this parameter. |
| /quit | Quits after processing command line (to view parameters). |
| /nosd | Indicates that no source directory is specified. |
| /nodd | Indicates that no destination directory is specified. |
| /if | Includes the specified files. |
Remarks
-
Using /PURGE or /MIR on the root directory of the volume formerly caused robocopy to apply the requested operation on files inside the System Volume Information directory as well. This is no longer the case as if either is specified, robocopy will skip any files or directories with that name in the top-level source and destination directories of the copy session.
-
Modified files classification applies only when both source and destination filesystems support change timestamps, such as NTFS, and the source and destination files have different change times but are otherwise the same. These files aren’t copied by default. Specify /IM to include them.
-
The /DCOPY:E flag requests that extended attribute copying should be attempted for directories. Robocopy will continue if a directory’s EAs couldn’t be copied. This flag isn’t included in /COPYALL.
-
If either /IoMaxSize or /IoRate are specified, robocopy will enable copy file throttling to reduce system load. Both may be adjusted to optimal values and copy parameters, but the system and robocopy are allowed to adjust them to allowed values as necessary.
-
If /Threshold is used, it specifies a minimum file size for engaging throttling. Files below that size won’t be throttled. Values for all three parameters may be followed by an optional suffix character such as [KMG] (kilo, mega, giga).
-
Using /LFSM requests robocopy to operate in ‘low free space mode’. In this mode, robocopy will pause whenever a file copy would cause the destination volume’s free space to go below a ‘floor’ value. This value can be explicitly specified using /LFSM:n[KMG] flag.
-
If /LFSM is specified with no explicit floor value, the floor is set to 10% of the destination volume’s size. Low free space mode is incompatible with /MT and /EFSRAW.
Exit (return) codes
| Value | Description |
|---|---|
| 0 | No files were copied. No failure was encountered. No files were mismatched. The files already exist in the destination directory; therefore, the copy operation was skipped. |
| 1 | All files were copied successfully. |
| 2 | There are some additional files in the destination directory that aren’t present in the source directory. No files were copied. |
| 3 | Some files were copied. Additional files were present. No failure was encountered. |
| 5 | Some files were copied. Some files were mismatched. No failure was encountered. |
| 6 | Additional files and mismatched files exist. No files were copied and no failures were encountered meaning that the files already exist in the destination directory. |
| 7 | Files were copied, a file mismatch was present, and additional files were present. |
| 8 | Several files didn’t copy. |
[!NOTE]
Any value equal to or greater than 8 indicates that there was at least one failure during the copy operation.
Examples
It’s highly recommended when running the robocopy command to create a log file that can be viewed once the process completes verifying its integrity. In the following examples, each one uses the /LOG: parameter. To append any log information to the same log file, use the /LOG+: parameter instead.
To copy all files and subdirectories, including empty directories, from the «Records» folder to the «Backup» folder on drive «D», type the following:
robocopy C:UsersAdminRecords D:Backup /E /ZB /LOG:C:LogsBackup.log
To mirror the contents of the «Records» folder to the «Backup» folder on drive «D», delete any files in the destination that don’t exist in the source with 2 retries and waiting 5 seconds between each retry, type the following:
robocopy C:UsersAdminRecords D:Backup /MIR /R:2 /W:5 /LOG:C:LogsBackup.log
To copy all files and subdirectories that aren’t empty from the «Records» folder to the «Backup» folder on drive «D», retaining the file data, attributes, and timestamps with 16 multi-threaded copy operation, type the following:
robocopy C:UsersAdminRecords D:Backup /S /E /COPY:DAT /MT:16 /LOG:C:LogsBackup.log
To move files and subdirectories, excluding empty directories, from the «Records» folder to the «Backup» folder on drive «D», and exclude files older than 7 days, type the following:
robocopy C:UsersAdminRecords D:Backup /S /MAXAGE:7 /MOV /LOG:C:LogsBackup.log
To copy all files and subdirectories, including empty directories, from the «Records» folder to the «Backup» folder on drive «D» showing the estimated time for each file and delete any files and directories in the destination that don’t exist from the source, type the following:
robocopy C:UsersAdminRecords D:Backup /ETA /PURGE /LOG:C:LogsBackup.log
Related links
- Command-Line Syntax Key
















































