Копирование папки с правами доступа windows server

Robocopy – это консольная утилита Windows для копирования файлов, которую можно использовать для синхронизации/репликации файлов и каталогов, и в сценариях

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 в windows для копирование и синхронизации файлов и каталогов

Исполняемы файл 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).

создать задание планировшика robocopy

Укажите имя задания, и выберите пользователя из-под которого будет выполняться задание. Пользователь должен иметь доступ на чтению и запись в обоих каталогах (при копировании по сети между серверами домена можно использовать аккаунт System, в этом случае нужно предоставить на целевой каталог права RW для объекта computer сервера-источника) .

Выберите опцию Run whether user is logged on or not, для того чтобы задание выполнялось в фоновом режиме. Также отметьте Run with highest privileges. Эта опция сработает если аккаунт из-под которого выполняется задание, будет иметь права администратора.

задание зеркалирования robocopy

Перейдите на вкладку 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 на нужный вам путь.

запуск команды robocopy через планировшик

Остальные настройки заполнять не надо. После нажатия на кнопку ОК, вас попросит ввести пароль от учетной записи, которую вы выбрали для запуска задания.

Если вы всё настроили правильно, директории должны начать синхронизироваться. события запуска задания планировщика

Если у вас возникли проблемы с выполнением скрипта, то обязательно проверьте вкладку History вашей задачи

журнал запуска планировщика robocopy

Отслеживание изменений в каталогах с помощью 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

robocopy logo

Доброе времени суток. Уважаемые читатели и гости, крупного 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 в системе?

Основной исполняемый файл Robocopy.exe располагается по пути C:WindowsSystem32. Утилита очень компактная и весит всего 132 килобайта, но это не уменьшает ее мощи и функционала.

местоположение файла robocopy

Где скачать утилиту 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

Далее полученный файла robocopy, вам необходимо разархивировать данный файл, для этого у вас должен быть архиватор winrar или 7-zip. Через правый клик извлекаем его содержимое.

Скачать robocopy.exe-01

Далее 7-Zip-ом распаковываем msi пакет rktools.msi.

Скачивание robocopy

Перейдите в папку rktools, там вас будет ждать файл robocopy.exe, который вы можете скачать куда угодно.

файл robocopy.exe

Возможности утилиты Robocopy (Robust File Copy Utility)

И так давайте разбираться, какими функциональными возможностями обладает данная утилита. Как я и писал выше Robocopy умеет:

  • Производить копирование файлов и папок
  • Производить синхронизацию файлов и папок
  • Копировать по расширениям файлов
  • Переносить права на папки и файлы
  • Копирование и перенос файлов по датам и за нужный период
  • Удалять файлы и папки

Чтобы посмотреть все ключи и их назначение, нам нужно открыть командную строку, желательно от имени администратора и ввести команду:

справка утилиты robocopy

У вас появится небольшая справка, в которой вам отобразят конструкцию построения команд и несколько примеров реализации. Чтобы вывести все доступные параметры Robocopy вам необходимо ввести команду:

Тут ключи и параметры будут разбиты на несколько подкатегорий:

  1. Параметры копирования
  2. /COPY:флаги копирования
  3. /DCOPY:флаги копирования
  4. Параметры выбора файлов
  5. Параметры повторных попыток
  6. Параметры ведения журнала
  7. Параметры задания
  8. Комментарии

Параметры утилиты robocopy

Ключи параметров копирования:

  • /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

примеры использования robocopy

Напоминаю параметр /E копирует файлы и папки, в том числе и пустые. Сам процесс выглядит поэтапным копированием в один поток файлов.

По окончании выполнения команды вы увидите сводную таблицу, в которой будет статистика по каталогам, файлам, времени, пропущенным файлам и скорости.

 robocopy примеры применения

Но при таком использовании robocopy, вы на каталоге назначения получите файлы с уже другими правами на них. Видно это в свойствах.

Перенос прав на файл через robocopy

Чтобы скопировать и исправить на файлах в каталоге назначения все права доступа (перезаписав текущие и подставив туда из источника), вам необходимо выполнить вот такую команду:

robocopy C:Temp C:Test_robocopy /E /COPYALL /SECFIX

Ключ /COPYALL переносит все сведения о файле, а параметр этого ключа /SECFIX исправит все сведения на вкладке «Безопасность».

Если у вас не перенеслись новые права на файлы, то со 100% вероятностью у вас консоль cmd в которой вы запускаете сценарии Robocopy, работает не от имени администратора, старайтесь всегда делать из под данного режима

robocopy перенос прав на файл

Напомню, что есть ключ /MIR параметра robocopy, он делает зеркальную копию каталогов, вот его пример использования:

robocopy C:Temp C:Test_robocopy /MIR /Z

В момент такого зеркального копирования, утилита Robust File Copy Utility, сделает на конечной стороне полную копию источника, и со всеми списками доступа (ALC) на вкладке безопасности, так же будут перенесены все атрибуты данных. При повторном запуске, будут перенесены, только изменения.

Зеркальное копирование в robocopy

Чтобы осуществить перенос данных на сетевую шару, вы можете использовать вот такую конструкцию:

При простом копировании 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

Копирование файлов за 5 дней в robocopy

Если нужно исключить сегодняшний день, то нужно добавить ключик /MINAGE:1

robocopy C:Temp \c-10-5210Test_robocopy /MAXAGE:5 /MINAGE:1

Если стоит задача скопировать файлы и исключить из все, возраст которых меньше 1 день, то будет выглядеть вот так:

robocopy C:Temp \c-10-5210Test_robocopy /MINAGE:1

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

Вырезать файлы в robocopy

Иногда может возникнуть задача, перенести все, кроме срытых файлов системы, для этого сценария Robust File Copy Utility имеет ключ /XA:H

robocopy C:Temp C:Test_robocopy /E /XA:H

Можно переносить файлы с пометкой «Только для чтения», через такую структуру

Копирование файлов только для чтения в robocopy

Копирование данных только с определенными форматами, например, exe и mp3, и не копировать пустые папки.

robocopy C:Temp C:Test_robocopy *.exe *.mp3 /S

robocopy копирование файла определенного формата

Также можно делать выборку по размеру файлов, например, мне нужно скопировать, все, что больше 100 килобайт и меньше 100 мегабайт.

robocopy C:Temp C:Test_robocopy /E /MAX:102400000 /MIN:102400

robocopy копирование файла определенного размера

При копировании данных можно исключить не нужные вам каталоги, вот пример команды, где исключается папка CrystalDiskMarkPortable:

robocopy C:Temp C:Test_robocopy /MIR /XA:SH /XD CrystalDiskMarkPortable /XJD

robocopy исключить определенный каталог

Что еще полезного умеет 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-консоль запущена в режиме администратора.

ОШИБКА 5 (0x00000005)

Таблица кодов ошибок, которые появляются в 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

Автоматическое копирование папок по расписанию с Robocopy

Чем хороша данная утилита, так это тем, что с ее помощью можно писать скрипты и сценарии, например в том же PowerShell. Все выше описанные команды, вы можете поместить в текстовый файл (txt), затем сменить ему расширение на bat или cmd, чтобы он стал исполняемым и далее использовать его, либо в групповой политике, или же создать с помощью него задачу в «Планировщике заданий Windows», хотя можно и прямо в нем вписывать все ключи и параметры Robocopy. Про создание задач в планировщике заданий Windows читайте по ссылке. Обратите внимание, что ключи я вписываю в поле аргументы.

Robocopy в планировщике заданий

Примеры скриптов при резервном копировании или синхронизации. Предположим у вас есть рабочая папка и вы бы хотели ее синхронизировать с другой или сетевой шарой, как я и писал выше вы делаете исполняемый файл или создаете задание в планировщике, вот пример команды, которая перенесет файлы, будет их синхронизировать, перенесет все атрибуты и права, а так же будет их обновлять. Папка 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

После загрузки RoboCopy GUI Utility ver. 3.1, нам его необходимо установить. Запускаем исполняемый файл. Соглашаемся с лицензионным соглашением.

Установка windows robocopy gui-01

Утилита вам предложит указать каталог куда будут извлечены файлы.

Установка windows robocopy gui-02

Соглашаемся с извлечением.

Извлечение файлов RoboCopy GUI Utility ver. 3.1

В итоге вы получите вот такую структуру файлов. Запускаем setup.exe.

Файлы RoboCopy GUI Utility ver. 3.1

У вас появится тривиальный мастер установки GUI интерфейса для Robocopy. Нажимаем next.

Установка windows robocopy gui-05

Принимаем лицензионное соглашение «I gree»

Установка windows robocopy gui-06

Указываете будет ли утилита устанавливаться только для вас или для всех.

Установка windows robocopy gui-07

next.

Установка windows robocopy gui-08

Установка графического интерфейса для Robocopy завершено.

Установка windows robocopy gui-09

У вас на рабочем столе появится ярлык Microsoft Robocopy GUI. Запускаем его и посмотрим, что из себя представляет эта утилита.

Установка windows robocopy gui-10

Обзор RoboCopy GUI Utility ver. 3.1

Давайте я бегло покажу, что из себя представляет данная программа. Сам графический интерфейс очень простой, так и должно быть. На первой вкладке вы увидите два действия:

  1. Первое, это нужно через «Source Path выбрать, что мы будем копировать»
  2. Второе действие, это в «Target Path мы задаем, куда мы будем переносить данные, при желании вы можете смонтировать сетевой диск, через пункт «Map Drive»»

Обзор RoboCopy GUI Utility ver. 3.1-01

На вкладке «Copy Options», вы увидите уже знакомые параметры использования Robocopy, тут есть и ключи /SEC для переноса прав и команда /MOVE, которую мы применяли для вырезания файлов и многое другое. Тут же вы задаете количество потоков копирования.

Robocopy и примеры использования с параметрами

Вкладка «Drive Mapping» поможет присоединить сетевой диск, тут вы указываете ip-адрес или DNS имя сервера, и учетные данные для подключения.

Robocopy и примеры использования с параметрами

Вкладка «Filters» позволит вам указать, что именно нужно переносить и сделать фильтрацию, например, не переносить файлы длина которых в имени составляет более 256 символов, или только txt файлы.

Robocopy и примеры использования с параметрами

Вкладка «Logging» задает параметры ведения логирования вашего задания.

Robocopy и примеры использования с параметрами

Вкладка «Monitoring Options» будет полезна для наблюдения за источником копирования, в случае проблем, все можно идентифицировать и перезапустить.

Robocopy и примеры использования с параметрами

Аналоги утилиты Robocopy

Robust File Copy Utility не единственная утилита, которая позволяет копировать файлы, каталоги с атрибутами и правами, ее аналогами можно назвать утилиты:

  • Total Commander
  • icacls
  • Xcopy
  • Far
  • Rsync

Вот такая вот полезная и богатая функционалом утилита Robust File Copy Utility или Robocopy.exe, надеюсь, что данный материал был для вас полезен и вы им поделитесь в социальных сетях. А с вами был Семин Иван, автор и создатель IT блога Pyatilistnik.org.

  • Remove From My Forums

 locked

Перенос папок на другой сервер с сохранением прав на нее групп и пользователей

  • Вопрос

  • Установлен новый сервер 2008R2 стандарт -роль файловый сервер

    задача перенести папки — шары с основного КД где эти папки ранее размещались на новый сервер с сохранением прав безопасности на папки

    с основного КД где эти папки расположены подключился к файловому серверу \dc3e$  и скопировав папку ПРАВА НЕ ПЕРЕНЕСЛИСЬ

    предложу robocopy  ?


    windows server 2008R2 standart AD+DNS+DHCP , клиенты W7 pro

    • Изменено

      28 января 2012 г. 6:04

Ответы

    • Предложено в качестве ответа
      Ivan BardeenEditor
      28 января 2012 г. 7:15
    • Помечено в качестве ответа
      Denis DyagilevEditor
      28 января 2012 г. 7:44
  • На днях переносил с помощью Far Manager, но только через неделю чухнул, что systemACL (Аудит) не скопировался, а только сами права доступа!


    MCITP: Enterprise Administrator; MCT; Microsoft Security Trusted Advisor; CCNA; CCSI

    • Помечено в качестве ответа
      Михаил П
      28 января 2012 г. 8:26

  • Поддерживаю, перенос файловых ресурсов лучше всего делать с помощью утилиты Robocopy. Но кроме неё есть ещё одна интересная программа — Hyena (http://www.systemtools.com/hyena/). Она
    позволяет кроме всего прочего копировать не только файловые ресурсы со всеми разрешениями на них, но и сами шары с правами доступа на них. Т.е. перенос файловых ресурсов с сервера на сервер полностью автоматизируется. — Вручную на целевом сервере не нужно
    даже расшаривать папки. И всё это делается через удобный графический интерфейс.

    • Помечено в качестве ответа
      Михаил П
      28 января 2012 г. 10:06

  • Попробуйте хотя бы начать конфигурировать разрешения NTFS и реестра с помощью групповых политик.. у меня это работает .)


    MCITP: Enterprise Administrator; MCT; Microsoft Security Trusted Advisor; CCNA; CCSI

    • Помечено в качестве ответа
      Михаил П
      28 января 2012 г. 13:16

В файловой системе NTFS каждый объект  (файл или папка) имеет свой список контроля доступа (Access Control List, ACL), в котором содержится информация о том, кто (или что) имеет доступ к объекту и какие операции разрешено (или запрещено) этому субъекту проводить над объектом. А что происходит с ACL при копировании или перемещении объекта? Попробуем это выяснить …

В качестве подопытного возьмем папку Temp в корне диска C.  Откроем свойства папки и посмотрим ее разрешения. Как видите, в списке доступа есть только группа локальных администраторов и пользователь kirill (то есть я :)).

разрешения NTFS для папки

Теперь возьмем нашу папку.

копирование папки в проводнике

И помощью Проводника скопируем ее на компьютер SRV1, также в корень диска C.

вставка файла в проводнике

Если посмотреть разрешения скопированной папки, то мы увидим, что они полностью изменились.

разрешения папки после копирования

Для того чтобы понять, откуда взялись новые разрешения, пройдем в  дополнительные параметры безопасности папки (кнопка Advanced). Как видно из рисунка, все разрешения папки Temp унаследованы от диска С.

дополнительные разрешения папки

В этой ситуации нет ничего удивительного. По умолчанию разрешения NTFS сохраняются только при копированииперемещении в пределах одного логического диска, или тома. Если же объект перемещается на другой диск того же (или другого) компьютера, то все разрешения заменяются наследуемыми от родительского объекта, которым в нашем случае и является диск C компьютера SRV1.

В нашем случае скопирована всего лишь одна папка с несколькими файлами, поэтому при необходимости восстановить утерянные разрешения несложно. А если подобное случиться при переносе серьезного файлового ресурса с высоким уровнем вложенности и сложной структурой разрешений NTFS, заданных вручную ?

К сожалению, проводник Windows не умеет копировать разрешения файловой системы, для этого нам придется воспользоваться альтернативными средствами.

Утилита Icacls

Эта утилита специально предназначена для работы с ACL. В числе прочего она может сохранить список доступа указанного объекта в файл, а затем применить этот список к указанному объекту.

Открываем командную консоль и сохраняем ACL исходного каталога Temp со всем его содержимым (подкаталоги и файлы) в файл tempACL командой:

Icacls C:Temp* /save tempACL /t

сохранение списка доступа в файл

По умолчанию утилита сохраняет файл в профиле пользователя — C:UsersИмя_пользователя. Это обычный текстовый файл, который при желании можно открыть в Блокноте.

сохраненный файл ACL

Перенесем созданный файл tempACL на SRV1 и восстановим из него ACL каталога Temp командой:

Icacls C:temp /restore C:tempACL

восстановление ACL из файла

Затем еще раз посмотрим разрешения скопированой папки Temp и увидим, что справедливость восторжествовала 🙂 и исходные разрешения восстановлены.

восстановленные разрешения папки Temp

Утилита Xcopy

Xcopy является продвинутым вариантом команды Copy  и в отличие от нее умеет работать с сетевыми путями, а также копировать сведения о владельце и данные ACL объекта.

В нашем случае для того, чтобы скопировать каталог Temp на SRV1 с сохранением списков доступа воспользуемся командой:

Xcopy C:Temp \SRV1C$Temp /E /O 

копирование с помощью Xcopy

Total Commander

Те, кто боится не любит работать в командной строке, могут воспользоваться файловым менеджером стороннего производителя, например  Total Commander. В нем при копированиипереносе есть возможность скопировать разрешения NTFS, просто отметив галочкой чекбокс «Copy NTFS permissions».

копирование прав доступа с помощью Total Commander

И в завершение один важный момент, который учитывать при перемещении файловых ресурсов — разрешения NTFS можно свободно переносить только в пределах одного домена или леса доменов. Если к примеру скопировать папку со списком доступа на компьютер, не входящий в домен, то получим интересную ситуацию: ACL перенесен, но в локальной базе учетных записей нет такого пользователя. В этом случае при просмотре разрешений мы увидим примерно такую картину:

права на папку при отсутствии доступа к домену

Копирование заблокированных файлов с HoboCopy
Автор: windata.ru Оригинальная статья взята здесь.

Предположим, что вы хотите скопировать файл, который намертво заблокирован другой программой. В результате Windows нам радостно сообщит о том, что системный процесс не может получить доступа к файлу, поскольку последний заблокирован другим процессом. Как же тогда скопировать такой файл?

Что же мешает, собственно говоря, освободить файл, закрыв заблокировавшую его программу? Да ничего, но представьте, что вы настраиваете автоматическое резервное копирование файлов. Если файл заблокирован, то программа резервного копирования здесь не справится и нужный файл не будет скопирован. Вот тут-то и понадобится один рецепт, который представлен в этой статье.

Robocopy — описание и примеры использования, XCOPY, HoboCopy

Начиная с Windows XP операционная система от Microsoft поддерживает технологию теневого копирования (она же Volume Shadow Copy). Данная технология используется для резервного копирования данных и восстановления системы. В частности, теневая копия представляет собой временный “снимок” файла или раздела жесткого диска. При этом одна программа может получить доступ чтения именно к снимку, в то время как другие программы могут в это же время работать с файлом или изменять его.

Именно это нам и нужно – чтение занятого файла. И поможет нам в этом утилита для командной строки HoboCopy, предназначенная для резервного копирования файлов.

На следующей странице можно загрузить HoboCopy для Windows XP и Windows Vista/7 в версиях 32/64 бит:

Скачать HoboCopy для различных версий Windows (GitHub)

Для работы HoboCopy (да и многих других программ для резервного копирования) нам надобятся две следующих службы Windows:

  • Теневое копирование тома
  • MS Software Shadow Copy Provider

Если вы забыли, где просмотреть службы, то в Windows 7 перейдите по пути Панель управления > Система и безопасность > Администрирование > Службы (а в Windows XP – Панель управления > Администрирование > Службы).

Убедитесь в том, что службы не отключены. Если для них указан режим запуска Вручную, то программа HoboCopy самостоятельно запустит эти службы, когда понадобится и отключит их по завершению своей работы.

Резервное копирование одного файла с помощью HoboCopy

Как вы помните, HoboCopy – утилита командной строки. К слову сказать, в Windows 7 и Windows Vista ее нужно запускать в режиме администратора, для чего щелкните на файле программы правой кнопкой мыши, выберите команду Свойства > Дополнительно и установите флажок Запуск от имени администратора. Также будет не лишним ознакомиться со статьей Запуск программ Windows 7 в режиме администратора.

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

Bash
1
hobocopy c:имя_папки d:папка_копирования <имя_файла>

К примеру, мы решили скопировать файл c:userswindatamailoutlook.pst прямо вот сюда: d:backupsoutlook.pst.

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

Bash
1
hobocopy c:userswindatamail d:backups Outlook.pst

Резервное копирование каталога с помощью HoboCopy

Чем копировать по одному файлу, разумеется, куда лучше настроить резервное копирование целыми папками. Для этого нам понадобятся такие ключи:
/full – копирование всех файлов
/skipdenied – игнорировать любые сообщения ошибках, связанных с разрешением доступа
/r – рекурсивное копирование
/y – никаких запросов, копировать абсолютно все

Синтаксис команды следующий:

Bash
1
hobocopy /full /skipdenied /y /r c:имя_папки d:папка_копирования

Например, используя предыдущий пример, скопируем всю пользовательскую папку в папку d:backups. Для этого нам понадобится такая команда:

Bash
1
hobocopy /full /skipdenied /y /r c:userswindata d:backups

На копирование понадобится какое-то время, так что можно передохнуть, перекусить и потрещать вконтактике (шутка). Результатом станет полная копия всего каталога. Если при копировании были сообщения об ошибках, связанных с разрешением доступа, программа укажет на проблемные файлы.

Инкрементное копирование файлов с помощью HoboCopy

Утилита HoboCopy поддерживает и инкрементный тип копирования. Что это такое? Весьма полезная функция, она позволяет копировать только те файлы, что изменились с момента предыдущего резервного копирования. При этом последняя дата копирования хранится в файле, который вам нужно указать непосредственно в команде утилиты.

Для инкрементного копирования потребуются два ключа:
/statefile=имя_файла – это имя файла, в котором будут записаны данные о последнем копировании
/incremental – а это, как понятно из названия, ключ для инкрементного копирования

Синтаксис команды выглядит так:

Bash
1
hobocopy /incremental /statefile=имя_файла /y /r c:имя_папки d:папка_копирования

Пример:

Bash
1
hobocopy /incremental /statefile=d:lastbackup.dat /y /r c:userswindata d:backups

Важно. При первом запуске программы необходимо указать ключ /full вместо /incremental, иначе будет выдано сообщение об ошибке, так как файл с данными о предыдущем состоянии еще не будет создан. А вот уже все последующие команды нужно указывать с ключом /incremental.

Таким образом, утилита HoboCopy позволяет настроить автоматическое копирование папок, для чего нужно лишь запланировать процедуру копирования. В Windows 7/Vista для этого используйте системную программу Планировщик заданий (Панель управления > Система и безопасность > Администрирование > Расписание выполнения задач), а в Windows XP – окно Назначенные задания (Панель управления > Назначенные задания).

Для копирования файлов и папок (в том числе по сети) с сохранением прав, в Windows имеется встроенная программа Robocopy. Использовать данную программу довольно просто, достаточно в командной строке написать:

robocopy \computersrc c:dst /e /zb /copyall /w:5

Справку по синтаксису и параметрам, можно посмотреть прямо в командной строке. Но есть следующие интересные моменты:
/Z — включает поддержку докачки, без которой, в случае обрыва связи при копировании через сеть, хэш-сумма скопированного файла может не сойтись с источником;
/M — копирует файлы с атрибутом «Архивный» и сбрасывает его, т.е. копирует только файлы, которые были изменены, и чтобы не измененные файлы в следующий раз не копировать, сбрасывает атрибут «Архивный»;
/B — копирует файлы, для которых NTFS разрешения для данного пользователя отсутствуют (при этом пользователь должен быть либо в группе Администраторы, либо в группе Операторы архива);
/sec — копирует только основную информацию о файлах (Данные, Атрибуты, Метки времени),
/copyall — копирует всю информацию о файлах (Данные, Атрибуты, Метки времени, Список контроля доступа NTFS (ACL), Сведения о владельце, Сведения аудита);
параметры /R и /W лучше всегда задавать вручную, так как по умолчанию они очень велики, и в процессе копирования, robocopy может просто надолго застрять на каком-либо файле.

Robocopy (Robust File Copy) is a command line folder and file replication tool available as a standard Windows feature since Windows Server 2008. The goal of this post is to give you a quick start guide by providing some Robocopy examples.

Contents

  1. Help and default options
  2. Copy examples
  3. Move examples
  4. Synchronize examples
  5. Filtering examples
  6. Networking examples
  7. Backup mode
  8. Final words
  • Author
  • Recent Posts

Leos has started in the IT industry in 1995. For the past 15+ years he focused on Windows Server, VMware administration and security. Recently, Leos is focusing on automation via Ansible. He is also a Certified Ethical Hacker.

Over the past 25 years, since Robocopy first became available as part of the Windows NT4 resource pack, it has not changed much. Some features, such as SMB compression, were added, but the usage is still the same. As Robocopy has many great features, such as the ability to copy NTFS ACLs (permissions), it is one of the best free tools for file copy/mirror operations. This Wikipedia post is a good starting point for getting more information about robocopy.

Before we get to the Robocopy examples, you should know the main limitation of robocopy—it cannot copy open or locked files, as it does not use VSS (Volume Shadow Copy Service).

Help and default options

Robocopy itself includes very detailed help, with a description of each option. Simply type robocopy /? to get help displayed.

Robocopy help

Robocopy help

The basic syntax for Robocopy is:

robocopy c:tempsource c:tempdestination

This will copy all files, excluding subfolders, from the specified source (c:tempsource) to the specified destination (c:tempdestination) with a bunch of default options.

Note: If you have a folder with spaces in the name, simply put quotes around the path (“c:tempsource with spaces”).

Robocopy default options

Robocopy default options

Let’s take a closer look at what the options mean:

  • *.*—Defines a file filter. The first asterisk (*) represents the filename part, and the second asterisk represents the extension. In this case, the command copies all filenames with all extensions.
  • /DCOPY:DA—Defines what to copy for directories. D stands for «data» and A stands for «attributes.»
  • /COPY:DAT—Defines what to copy for files. The extra T stands for «timestamps;» DA is the same as for directories.
  • /R:1000000—Defines the number of retries on failed copies, for example, if a file is locked.
  • /W:30—Defines the number of seconds to wait between retries.

As you can see, the number of retries is very large (one million), which is not practical in most cases. If there is a single locked file inside the directory, robocopy will do a million retries and will wait 30 seconds between them, amounting to almost 350 days. I guess this is not what you normally want.

Generally speaking, there are three things you will do using robocopy: copy, move, and synchronize folders and files.

Copy examples

The easiest way to copy a folder with all files and subfolders is to run this command:

robocopy c:tempsource c:tempdestination /E /DCOPY:DAT /R:10 /W:3

The /E switch tells Robocopy to copy all subfolders, including empty ones. If you don’t want to copy empty subfolders, use the /S switch. Note that I have specified /DCOPY:DAT (default is DA), as I usually want the folder timestamps to be the same as the source. I also limit the number of retries and wait times. If there is a file locked, it won’t usually be unlocked quickly, and it’s easier for me to check the erred files manually later rather than waiting ages for the whole command to complete.

If you are about to copy a large number of files, it might be more useful to save the output to a log file so you can review the results later, even if the command prompt is closed.

robocopy c:tempsource c:tempdestination /E /DCOPY:DAT /R:100 /W:3 /LOG:C:temprobocopylog.txt

Will give you a text log file with all the information you would normally see on screen.

Redirecting the output to a log file

Redirecting the output to a log file

Note: If the destination directory (c:tempdestination) already exists, you will see one skipped folder in the results.

In many (if not most) cases, you will need to create a completely identical copy of the source, including the NTFS owner and auditing information. For that, I add /COPYALL to the command, which is equivalent to /COPY:DATSOU.

robocopy c:tempsource c:tempdestination /E /COPYALL /DCOPY:DAT /R:100 /W:3

Note that this command has to be run from an elevated command prompt, unless you have turned off UAC, otherwise you’ll receive this error message:

ERROR : You do not have the Manage Auditing right.

Error when using /COPYALL without elevation

Error when using /COPYALL without elevation

Move examples

Robocopy offers two options for moving files and folders:

  • /MOV—Moves files only, leaving the empty folder structure at the source
  • /MOVE—Moves files and folders

Use the command below to move all files and folders, including empty ones, with all attributes. Note that the source folder will also be deleted.

robocopy c:tempsource c:tempdestination /E /COPYALL /DCOPY:DAT /MOVE /R:100 /W:3

Synchronize examples

As with move, there are two options to synchronize folders:

  • /PURGE—Deletes the files and folders that are no longer present in the source but without subfolders.
  • /MIR—Is equivalent to /PURGE /E. /MIR also copies all files in subfolders, including empty ones.

Be careful with this command, especially with source and destination folders. If you make a mistake here, you might get files lost in the specified folder.

robocopy c:tempsource c:tempdestination /MIR /COPYALL /DCOPY:DAT /R:100 /W:3

Filtering examples

Sometimes you might want to copy only specific files, for example, Word documents. This can be done easily by adding the *.docx filter after the destination folder before any other options.

robocopy c:tempsource c:tempdestination *.doc

You might also want to exclude some files or folders from the operation. This is done using the /XF and /XF options. To exclude all .doc files, use the command below.

robocopy c:tempsource c:tempdestination /XF *.doc

To exclude multiple subfolders, use spaces in the command:

robocopy c:tempsource c:tempdestination /XD Subfolder EmptySubfolder

Robocopy includes many more filtering options, which you can find in help under the File Selection Options section.

Networking examples

Another great feature of Robocopy is that it works well with UNC paths and can resume operation in case of a network interruption. The command below will copy the files in restartable mode.

robocopy c:tempsource \MYSERVERmyshare /Z

Backup mode

The last, but definitely not the least, option I will cover today is the backup mode option /B. This option allows administrators to copy files in a special backup mode. This is extremely useful if you are asked to copy folders to which you don’t have access. The backup mode uses the Backup and Restore security privilege to bypass the NTFS permissions and copy the files. This again requires a command prompt to be elevated. In addition, your account needs at least SeBackupPrivilege, which is usually granted to the Administrators and Backup Operators groups.

robocopy c:tempsource c:tempdestination /E /COPYALL /DCOPY:DAT /B

Final words

Robocopy is a very powerful tool for performing various file and folder operations. Many administrators use it on a daily basis for profile migrations and other similar operations. The big advantage is that it’s part of the operating system itself. There are dozens of other options that can be used with Robocopy, but to cover them all would be beyond the scope of this post.

Robocopy is one of the most-used command-line utilities to copy large volumes of data in Windows. It’s such a popular tool because of how powerful it is. But with all that power comes complexity. In this guide, we will break down all that complexity and provide a complete tutorial on using this useful tool.

Not a reader? Watch this related video tutorial!

Not seeing the video? Make sure your ad blocker is disabled.

Robocopy is a Windows command-line utility that’s been available since Windows NT. It’s a replacement for the less versatile xcopy utility. It allows you to specify a drive path or server path to copy/move files at a command prompt.

The version of Robocopy as of this writing is up to 10.0.18. This is the version I performed my testing on.

Robocopy provides a slew of features you can leverage to perform efficient and fast file copies and moves. It can:

  • Copy files over a network with resume capabilities
  • Can skip NTFS junction points causing failure typically from infinite loops
  • Can copy file and directory attributes preserving timestamps
  • Can copy NTFS permissions, owners, and auditing info
  • Can copy directory timestamps
  • Can copy files in ‘backup’ mode to ensure files are copied even those rights have been denied to the administrator
  • Automatic retries
  • Can sync two folders
  • Is smart enough to skip files already copied
  • Can copy paths larger than the 256 character path limit
  • Perform asynchronous copies using its multithreading ability.
  • Returns standardized exit codes for use in scripts

As you can see, there’s a lot to to copy. I wanted to cover everything you need to know about this handy tool.

Common Robocopy Syntax Reference

Why such a long blog post on a single utility? Just feast your eyes on the tables below. You have a lot of options to copy or move files with robocopy! You will more options in the individual sections.

These tables were built from the help syntax returned from robocopy /?. They’ve been broken up into more meaningful sections, added to over time, and cleaned up to provide more useful info.

Source Options

Switch Explanation Default Behavior Equivalent Switch Notes
/S Copy subfolders
/E Copy subfolders including empty subfolders
/COPY:[DATSOU] Copy options /COPY:DAT D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T)
/SEC Copy files with SECurity /COPY:DATS
/DCOPY:T Copy directory timestamps
/COPYALL Copy ALL file info /COPY:DATSOU This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit)
/NOCOPY Copy NO file info useful with /PURGE
/A Copy only files with the Archive attribute set
/M like /A, but remove Archive attribute from source files
/LEV:n Only copy the top n LEVels of the source tree
/MAXAGE:n MAXimum file AGE – exclude files older than n days/date
/MINAGE:n MINimum file AGE – exclude files newer than n days/date If n < 1900 then n = no of days, else n = YYYYMMDD date
/FFT Assume FAT File Times 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network.
/256 Turn off very long path (> 256 characters) support

Destination Options

Switch Explanation Default Behavior Equivalent Switch Notes
/A+:[RASHCNET] Set file attribute(s) on destination files + add
/A-:[RASHCNET] Remove file attribute(s) on destination files
/FAT Create destination files using 8.3 FAT file names only
/CREATE Create directory tree structure + zero-length files only
/DST Compensate for one-hour DST time differences

Copy Options

Switch Explanation Default Behavior Equivalent Switch Notes
/L List files only Don’t copy, timestamp or delete any files
/MOV Move files Delete from source after copying
/MOVE Move files and directories Delete from source after copying
/sl Copy file symbolic links instead of the target
/Z Copy files in restartable mode Survive a network glitch
/B Copy files in backup mode
/J Copy using unbuffered I/O Recommended for large files
/NOOFFLOAD Copy files without using the Windows copy offload mechanism https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)
/EFSRAW Copy any encrypted files using EFS RAW mode
/TIMFIX Fix file times on all files, even skipped files
/XO Exclude older if destination file exists and is the same date or newer than the source – don’t bother to overwrite it.
/XC Exclude changed files
/XN Exclude newer files
/XX Exclude files present in destination but not source /XX
/XF file [file]… Exclude files matching given names/paths/wildcards
/XD dirs [dirs]… Exclude directories matching given names/paths. /XF and /XD can be used in combination e.g. ROBOCOPY c:source d:dest /XF *.doc *.xls /XD c:unwanted /S
/IA:[RASHCNETO] Include files with any of the given attributes
/XA:[RASHCNETO] Exclude files with any of the given attributes
/IM Overwrite modified files. This includes the same files with different times.
/IS Overwrite files even if they are already the same
/IT Include tweaked files
/XJ Exclude junction points from source /XJ
/XJD Exclude junction points from source directories
/XJF Exclude junction points from source files
/MAX:n Exclude files bigger than n bytes
/MIN:n Exclude files smaller than n bytes
/MAXLAD:n Exclude files unused since n
/MINLAD:n Exclude files used since n If n < 1900 then n = n days, else n = YYYYMMDD date
/MIR Mirror a directory tree /PURGE /E
/PURGE Delete dest files/folders that no longer exist in source
/XL Exclude files present in source but not destination
/SECFIX Robocopy /secfix fixes file security on all files, even skipped files. Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC
/ZB Use restartable mode; if access denied use Backup mode

Monitoring Options

Switch Explanation Default Behavior Equivalent Switch Notes
/R:n Number of retries on failed copies /R:1000000 Always try to set this option. I recommend setting this to 10-20 to not waste time retrying.
/W:n Wait time between retries /W:30 Always try to set this option to a lower number to retry more quickly. I suggest 5-10.
/REG Save /R:n and /W:n in the Windows registry as default settings
/RH:hhmm-hhmm times when new copies can be started
/TBD Wait for sharenames to be defined retry error 67
/PF Check run hours on a per file (not per pass) basis
/MON:n Run again when more than n changes seen
/MOT:m Run again in m minutes, if changed

Understanding Robocopy Behavior

I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.

I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.

Robocopy Only Copies Entire Directories

Every robocopy execution will have a source and a destination directory. Robocopy copies and moves files by entire directory. It’s not possible to explicitly copy a single file with robocopy. Use copy or PowerShell’s Copy-Item for that.

However, you can robocopy single file with the right filtering which you’ll learn about below. To robocopy a single file file, specify the source and destination directories immediately followed by the file name in the source.

> robocopy c:src d:dst copythisfile.txt

Syntax Depends on the Environment

Also, the options you provide to robocopy will depend on the environment. You’ll need to answer a few questions when trying to figure out which options to use.

  • Will you always be copying to an empty directory?
  • Is it possible files may already exist in the destination directory?
  • Will you be copying terabytes of data or just a few megabytes?
  • Will you be copying files over a network or locally?
  • …and more.

If there are no files in the destination file directory, you shouldn’t care about options that overwrite files. If you won’t be copying files over the network, don’t worry about those options. Explicitly define your current and potential future circumstances your environment will be in.

Recognize Default Options

Robocopy uses a lot of options by default. You can pick them out by looking at the tables above. It also provides a handy output to every time you run the utility.

You can see below that when I ran robocopy with its most basic options (the source and destination folder), it automatically used some options. Understanding the default behavior is important.

Reference the options you see in the output with the option explanations above and you’ll understand exactly what robocopy is doing under the covers.

Default robocopy options
Default robocopy options

Understanding What Robocopy Commands can Do

If you’ve used copy or PowerShell’s Copy-Item cmdlets, you’ve probably specified a source and destination and went on about your day. There’s not a whole lot of options you can configure there. These robocopy commands have a default behavior.

But robocopy, on the other hand, understands a lot more and gives you the flexibility to tweak the behavior as much as you want.

It’s important to know robocopy isn’t just aware of the concept of a file or directory. There’s a lot more to a filesystem than that and robocopy supports just about everything.

A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:

  • a timestamp (written, modified and accessed)
  • NTFS ACL
  • an owner
  • NTFS auditing information
  • hidden flag
  • archived flag

When you copy or move a file, you have the option to bring all of that stuff along with it, if you want.

Understand that when you run robocopy, you’re not just copying a file, you’re also potentially copying all of the other information with it. It’s important to realize that and to account for it in the options you provide robocopy.

The Basics: Performing WhatIf Scenarios

If you’ve got a huge file server somewhere you’d like to migrate and don’t want to take any action yet, you can use robocopy to return what it would have done.

Using the /L option, you can tell robocopy to enumerate all of the files and/or folders you specify and return a list of files it would have copied/moved.

You can use the /L option with any other option. This is a great way to return all of the options robocopy would have used (default or not). It will give you an overall view of what robocopy will do given the options you provided it.

Using /L
Using /L

The Basics: Copying Files

The most basic use of robocopy is using a source and destination directory with no options.

This option will copy all files (excluding subfolders) from C:src to C:dst.

You can also copy everything including subfolders (empty or not) and NTFS permissions. This is, from what I can tell, the method to literally copy everything there is about a directory of files to another directory.

Below I’m copying all NTFS ACLs, file owners, subfolders (including empty ones) and all file attributes. All of this is made possible with just the /E option to include all empty subfolders and  /COPYALL to catch the rest.

> robocopy C:src C:dst /E /COPYALL

The Basics: Moving Files

Moving files transfers files from one directory to another just like copying does. The only difference with a move operation is that the source files are removed after the copy.

To delete files/directories from the source after copying, use the /MOV option. This will remove all files in the specified directory (no subfolders).

> robocopy C:src C:dst /MOV

You can also use /MOVE to move all files and subfolders.

> robocopy C:src C:dst /MOVE

The Basics: Syncing Files

Robocopy allows you to sync two directories. This means either ensuring all files in the destination directory are in the source directory and no more. /MIR will replicate data copying all files in the source not in the destination and delete files in the destination not in the source. Beware!

> robocopy C:src C:dst /MIR

Copying Files over a Network

If you’re copying files over a network, there are a few options that you should consider.

Robocopy allows you to copy files in ‘restartable mode’ using the /Z option. This means that if a file begins copying and fails midway, the copy can start again instead of failing completely. The /Z option is useful when the stream gets cut over a network.

Warning: Some have reported using /Z cuts performance by 1/4. Let me know your findings.

You can also use the /FFT option. This switch has been known to more accurately preserve file timestamps when transferring over a network. This option uses FAT file system timestamps instead of NTFS.

robocopy C:src \SRV1share /Z /FFT

Using /IPG to Control Inter-Packet Gap

When copying files over a network, you can use the /IPG switch. This is also known as the inter-packet gap option. This option defines (in milliseconds) the frequency in which robocopy will wait between sending new packets.

Always use UNC Paths not Drive Letters

A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.

Robocopy Backup Mode (Robocopy /Z)

Robocopy has a option (/B) or as a backup to restartable mode (/ZB) which copies files in backup mode. What is “backup mode” anyway?

When you usually copy a file in Windows and hit a file that requires administrative privileges to access, you’ll receive an error indicating you don’t have permission. Even though you may be running as the local administrator, Windows won’t let you access it.

WARNING: There have been reports of corrupted server volumes when copying data to a Windows Server 2016 server with de-duplication turned on. When you use the /ZB switch, the result will be a dedup chunk store being trashed in the System Volume Information. The copied files will not be readable and will generate errors when trying to manipulate them. Serverfault link with more info.

Backup mode is a way to access files without worry about permissions.

Robocopy uses backup mode to use the SeBackupPrivilege for reading files and the SeRestorePrivilege user right to access any files it needs. This ignores any ACEs that would normally prevent you from accessing those files.

The SeBackupPrivilege and SeRestorePrivilege user rights are normally assigned to users in the Backup Operators and Administrators groups but sometimes they can get removed. Backup module eliminates that risk and temporarily grants the user executing robocopy those rights.

If you’d like to check to see if your user account has that right, you can run whoami /priv and both rights should be displayed.

Filtering Files and Folders

The large majority of the options available to you are to exclude files and directories many different ways. I’ve broken down all of the ways you can filter or exclude files and directories based on various criteria.

By File Name or File Extension

Filtering what files get copied/moved in a robocopy call is done using wildcards. You can use a wildcard to filter on files matching a specific file name string or extension.

For example, to only copy TXT files, you can specify *.txt.

> robocopy C:src C:dst *.txt

If you’d like to limit to only files starting with a, you could use a*.

> robocopy C:src C:dst a*

Y0u can also provide multiple sets of file name matches by separating them with a space as shown below.

> robocopy C:src C:dst a* b*

When you filter by file name, robocopy will show you the filter in the output.

FIltering files output
FIltering files output

By Directory Name

Robocopy allows you to filter items not just by file but by directory name too. Using robocopy /xd, you can exclude certain directories matching a specific name.

When copying multiple folders, use the /XD switch to exclude folders from the run.

> robocopy C:src C:dst /XD "c:srcexclude"

By File/Directory Timestamp

Below you will find all of the robocopy options that will exclude files and folders based on various timestamp attributes.

Switch Explanation
/DCOPY:T Copy directory timestamps
/MAXAGE:n Exclude files older than n days/date
/MINAGE:n Exclude files newer than n days/date
/XO If destination file exists and is the same date or newer than the source, don’t overwrite
/XN If destination file exists and is the same date or older than the source, don’t overwrite

There are two popular options to choose when filtering on things like timestamp; /XO and /MAXAGE.

/XO allows you to exclude files from copy only if they are newer than the source. Using the /XO option, you can robocopy only new files by access date.

> robocopy C:src C:dsc /XO

If you know the maximum age files will be, you can also use the /MAXAGE option. This allows you to specify in YYYMMDD format the older date a file can have before it’s copied.

> robocopy c:src c:dst /S /MAXAGE:20191001

Robocopy Jobs

You have seen that dozens of options are available to you. It’s easy for these options to soon become unwieldy. Thankfully, you have a better option than memorizing and ensuring all of these options are spot on every time.

Robocopy job files are text files containing one option per line. You’ll typically use robocopy to create these job files. Once created, you can then either use robocopy to modify them or a simple text editor.

You have various robocopy commands that work with jobs.

Switch Explanation Default Behavior Equivalent Switch Notes
/JOB:jobname Take parameters from the named job file
/SAVE:jobname Save parameters to the named job file
/QUIT Quit after processing command line Useful for viewing parameters
/NOSD No source directory is specified
/NODD No destination directory is specified
/IF Include the following files

A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:src D:dst /save:myjob. You can see that you can provide comments in the job file using :: which is most of what this file has.

Without comments, the file would only contain one option per line.

::
:: Robocopy Job C:MYJOB.RCJ
::
:: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM
::

::
:: Source Directory :
::
        /SD:C:SRC     :: Source Directory.

::
:: Destination Directory :
::
        /DD:C:SRC     :: Destination Directory.

::
:: Include These Files :
::
        /IF             :: Include Files matching these names
::              *.*     :: Include all names (currently - Command Line may override)

::
:: Exclude These Directories :
::
        /XD             :: eXclude Directories matching these names
::                      :: eXclude no names (currently - Command Line may override)

::
:: Exclude These Files :
::
        /XF             :: eXclude Files matching these names
::                      :: eXclude no names (currently - Command Line may override)
::
:: Copy options :
::
        /DCOPY:DA       :: what to COPY for directories (default is /DCOPY:DA).
        /COPY:DAT       :: what to COPY for files (default is /COPY:DAT).
::
:: Retry Options :
::
        /R:1000000      :: number of Retries on failed copies: default 1 million.
        /W:30           :: Wait time between retries: default is 30 seconds.
::
:: Logging Options :
::

Saving Job Files

Saving a job file is as simply as appending the /SAVE:<jobname> option to the end of your syntax. Replace <jobname> with the name of the job. The /SAVE option will create a file called <jobname>.rcj in the directory where you ran robocopy.

> robocopy C:src C:dst /SAVE:myjob

You must specify /SAVE as the last option. Any options specified after /SAVE will not be added to the job file. Also, note that even if an existing job file already exists, robocopy will always overwrite the existing one. Backup or version control your job files!

Note: If you attempt to use the /MT option when saving to a job file, it will not be in the job file. Let me know if you were able to get this to be included.

Using Job Files

Once a job is saved into a job file, you can then use the /JOB:<jobname> option to specify the job file to read from. Robocopy reads all of the parameters inside of the job file. It then executes just as if you provided the options directly on the command-line.

Creating a Job File Without Running a Job Using /QUIT

The purpose of the /QUIT option isn’t obvious. On the surface, you may think /QUIT forces a running to exit. Instead, /QUIT acts more like an option to prevent a job from running in the first place.

Officially, the /QUIT option “forces robocopy to terminate processing the command line”. However, it would be better explained as creating a job file without running a job.

If you use the /SAVE option, it will also run the job automatically. There’s no way to create a job file without first running the job. You could create the RCJ job file with a text editor or you could use robocopy do it by appending /QUIT to the end.

> robocopy C:src C:dst /SAVE:myjob /QUIT

Editing a Job File

Since job files are just text files, you could edit them with your favorite text editor or you could have robocopy do it for you.

You can edit job files using a combination of /JOB, /SAVE and /QUIT.

For example, perhaps you’d like to exclude all EXE files from your robocopy job saved in a job file called backupfiles.rcj. You’ve already created the job file and don’t want to overwrite the entire thing. You can add the new option like below:

> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT

Using Multiple Job Files

You can even combine the use of job files too. When specifying multiple job files in the same run, all of the options used in that run will be combined together.

For example, perhaps you have a large list of files to exclude from your backupfiles copy job. Open up a text editor, and add the following to create an exclude.rcj file.

You can then exclude these files from the backupfiles job like so:

> robocopy /JOB:backupfiles /JOB:exclude

Since the original backupfiles job file was already excluding all EXE files, the above run’s syntax would look be /XF *.exe a.exe b.txt c.cer. Robocopy combines all options into one.

Robocopy Templates and Using the /NOSD and /NODD Options

If you’re working with a lot of job files, you can build job files to accept parameters. Robocopy allows you to pass values from the command-line to jobs when they are run. A parameter isn’t a robocopy term but it fits well in this scenario.

You can build robocopy jobs to accept parameters by not specifying a source or destination directory either explicitly using the /NOSD and /NODD options or just not including a source and destination directory at all.

For a simple example, create a job file with no source or destination using the syntax below. This job’s intention is to copy all TXT and EXE files from a source to a destination directory.

> robocopy *.txt *.exe /SAVE:backupfiles /QUIT

On its own, this job will never work because there’s no source or destination directory specified.

When you create a job with no source and destination directory, the job file is automatically created using the /NOSD and /NODD options.

/NOSD           
/NODD
/IF
    *.txt
    *.exe
/DCOPY:DA
/COPY:DAT
/R:1000000
/W:30

The /NOSD options tells robocopy you did not include a source directory while /NODD indicates you didn’t include a destination directory. This job file is a “template” for other jobs.

But you can pass “parameters” to this job file to provide the source and destination directories.

To use the job file just created to copy files from C:src to C:dst, you can pass these directories directly on the command-line which will then be passed to the job.

> robocopy /JOB:backupfiles C:src C:dst

Asynchronous Copying (Robocopy /MT)

By default, robocopy only processes one file at a time. However, you can force robocopy to copy more files than at once by using the /MT option.

The /MT option allows you to specify the number of threads robocopy will use to copy files. The maximum is 128.

You can use /MT like so:

> robocopy C:src C:dst /MT:32

I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.

Note that if you do use /MT, you won’t be able to use /IPG or /EFSRAW. For better performance, don’t output the log to the console. Instead, use /LOG.

Scheduling Robocopy

Robocopy has a few ways you can schedule when it runs.

Using /RH

Using the /RH option, you can tell robocopy to only run during a specific time. This is great if you have a maintenance window or a time when everyone has gone home for the day.

You can specify a start time and an end time in the format HHMM-HHMM. For example, to invoke robocopy but only allow it to run between the hours of 5PM and 9AM as defined by the system clock, run:

> robocopy C:src C:dst /RH:1700-0900

You’ll see that if you invoke robocopy outside of those hours, it will tell you the current time and wait for the start time to run.

Robocopy tells you what time it will start if scheduled
Robocopy tells you what time it will start if scheduled

You must ensure that both times are in a 24-hour format and are exactly four digits long. The window must be greater than two minutes.

By default, using /RH will check for the start time before the entire run. However, if you have a lots of files and believe the process may go longer than that, you can use the /PF option. /PF will force robocopy to check the window before every file.

Using the Task Scheduler

The Output Log

Robocopy will always return an output log. Whether that log is displayed via stdout on the console and/or redirected to a log file is up to you.

You’ve got lots of options when displaying robocopy output.

Switch Explanation Default Behavior Equivalent Switch Notes
/NP No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file.
/unicode Display the status output as unicode text
/LOG:file Output status to log file and overwrite
/UNILOG:file Output status to unicode log file and overwrite
/LOG+:file Output status to log file and append to existing log file
/UNILOG+:file Output status to unicode log file and append to existing log file
/TS Displays the file timestamps for every file processed.
/FP Replaces simple file names with full file pathnames in the output.
/NS Does not show file sizes.
/NC Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/NFL Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged
/NDL Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files.
/TEE Output to console window, as well as the log file
/NJH No job header
/NJS No job summary
/BYTES Print sizes as bytes
/X Report all files, not just those selected & copied
/V Produce verbose output log, showing skipped files
/ETA Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish).
/DEBUG Show debug volume information

Limiting Log Elements with /NJS and /NJH

By default, robocopy returns two elements in it’s output, a job header and a job summary.

The job header is the simple ROBOCOPY header at the top.

Robocopy job header
Robocopy job header

The job summary shows a summary status of all files/folders, how much data was transferred and the time the run ended.

Robocopy job summary
Robocopy job summary

You can hide each of these elements using the /NJH option to hide the job header and the /NJS option to hide the job summary. You can include either of these options or both of them together.

Hiding the job header and job summary
Hiding the job header and job summary

Redirecting Output Log to a File

If you need to save the output log, you can redirect it to a text file and/or display it on the console. You can do so using traditional output redirectors like >, >>, PowerShell or the /LOG option.

To redirect the output log to a file using the /LOG option overwriting any existing log file use the syntax /LOG:<filepath> like below. The only output you will receive on the console is the path to the log file.

> robocopy C:src C:dst /LOG:c:file.log

 Log File : c:file.log

If you’d like to keep the contents of any existing log file and append results to a file, you can use the + operator as shown below.

> robocopy C:src C:dst /LOG+:c:file.log

 Log File : c:file.log

Redirecting Output Log to a File and Displaying on the Console

If you’d like to save the output log to a file yet also see it on the console, you can use the /TEE option. This option causes robocopy to write the output to the log file while still maintaining the default behavior of returning output to the console.

robocopy C:src C:dst /LOG+:c:file.log /TEE

Exit Codes

Like all other command-line utilities, robocopy returns exit codes depending on the results of the execution. We all wish for robocopy to always exit successfully with a 0 but that doesn’t always happen.

Below you will find all of the exit code that robocopy returns and their explanation. Any exit code greater than seven indicates at least one failure during execution.

Exit Code Explanation
0 No action performed. Source and destination are synchronized.
1 At least one file was copied successfully.
2 Extra files or directories were detected. Examine log.
3 Exit codes 2 and 1 combined.
4 Mismatched files or directories found. Examine log.
5 Exit codes 4 and 1 combined.
6 Exit codes 4 and 2 combined.
7 Exit codes 4, 1 and 2 combined.
8 At least one file or directory could not be copied. Retry limit exceeeded. Examine log.
16 Copy failed catastrophically.

Note that if you’re executing robocopy in a third-party utility, that utility may think any non-zero exit code is a failure. To prevent this, you can change the exit code to 0 if it returns 1.

The Robocopy “extra” file exit code is a common return code meaning an “extra” file is in the destination folder but not the source folder. This code excludes extras that will prevent any deletions from the destination.

Changing the Exit Code in a Batch File

If you’re executing robocopy with a batch file, you can find the value of the %ERRORLEVEL% variable. If it returns 1 then use the exit keyword to exit the script with 0.

> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0

Changing the Exit Code in a PowerShell script

If you’re executing robocopy in a PowerShell script, you can invoke robocopy with Start-Process using PassThru to return the process created and Wait to wait for robocopy to finish. You can then check the ExitCode property for a value of 1. If the exit code is 1 then exit the PowerShell script with a 0 using $host.SetShouldExit().

$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode
if ($exitCode -eq 1) {
    $host.SetShouldExit(0)
}

Common Errors

If you’re dealing with thousands of files, you’re bound to run across some problems. Here’s a breakdown of common errors I’ve come across

Error Invalid Parameter

When you see an error stating error invalid parameter, this normally means that you’ve tried to pass options to robocopy out of sequence somehow. The robocopy invalid parameter 3 error is the most common, it seems.

A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.

Robocopy Examples

You can build your own strings of robocopy or you can take what others have learned and use them! In this section, I’ll cover use cases on how to use robocopy to accomplish various things.

Find the directory size of a network folder

Contributor: northendtroooper (Reddit)

> robocopy "\MACHINEfileshare" c:dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64

Quickly delete folder contents (ignoring permissions on subfolders)

Contributor: pizzasteveo (Reddit)

> robocopy c:dummy c:foldertodelete /MIR

Performing large file migrations

Contributor: @MySnozzberries (Twitter)

The goal of this snippet is to force ownership on all files back to Administrators. We then add an explicit ACE for the Administrators group for full control on every object recursively even though we are also setting inheritance.

Finally, we do a full robocopy copy with DACLs to the destination with log. Log can then be reviewed for additional permission issues or just file locks and another delta sync can be performed later.

> takeown /F .test /R /A /D Y
> icacls .test /grant "Administrators":(OI)(CI)F /T
> robocopy .test .test2 /E /SEC /FP /V /LOG:.temp.log

Recursively force Administrators group as the owner of all files and directories. There can be ways around this, but this is the most heavy handed approach and usually the fastest.

> takeown /F .test /R /A /D Y

Once we are the owner we can now force a new ACE into the DACL for every object. This grants Administrators full control with inheritance enabled and recursively through the path.

Setting this at the root with inheritance would cover the environment, but when a share has CREATOR OWNER with Full Control (which sadly is even Microsoft’s recommendation for things like file user profile stores), the user can disable inheritance or remove ACEs at their discretion. So a heavy hand is usually the fastest fix.

> icacls .test /grant "Administrators":(OI)(CI)F /T

Once we have changed the DACLs on the majority of files we try copying the files to a new location, common for things like file share migrations. For this, we are copying the items recursively and using the /SEC switch to also copy the Data/Attributes/Timestamps/DACLs.

Then we log the operation with full paths and for all objects (/V verbose switch) to a log, so we can remediate the <5% of errors that are commonly path length or file lock related and get more granular.

> robocopy .test .test2 /E /SEC /FP /V /LOG:.temp.log

This is a simple framework for managing a file share migration with minimal impact to user experience. It also improves the control IT holds over the data. If a customer has a strong data governance practice where ownership is properly managed at a child folder level, this becomes a more complicated discussion, but most customers we find are lucky to be using inheritance and group-based ACEs only, so this is the most common situation and fix we start at.

Robocopy Alternatives

Robocopy is an awesome tool but there are so many other tools similar to it that may be of interest.

  • xxcopy – A similar command-line utility with tons of options.
  • Copy-Item PowerShell cmdlet – Not nearly as featured but much simpler.
  • TreeSize – GUI and scriptable utility to find folder information.

Summary

Robocopy is an excellent tool to copy large sets of files. Whether you’re doing a data migration, keeping folders in sync or simply need a quick way to accurately copy files, robocopy is a great choice.

Понравилась статья? Поделить с друзьями:
  • Копирование пакетов в кэш центра обновления windows долго грузит
  • Копирование от имени администратора windows 10
  • Копирование объектов с использованием буфера объектов windows
  • Копирование образа жесткого диска на другой диск windows
  • Копирование области экрана в windows 10