Полное руководство по копированию файлов и папок с использованием Xcopy

Инструмент Xcopy, что означает расширенное копирование, является популярной утилитой командной строки для копирования больших объемов данных в Windows. По сравнению с традиционной командой copy, у Xcopy больше функций и параметров, которые позволяют более точно контролировать процесс копирования или перемещения файлов и папок.

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

Давайте начнем!

Предварительные требования

Чтобы следовать примерам в этом руководстве, вам понадобится следующее.

  • A Windows (server or client) computer. Xcopy comes built-in to Windows, and you don’t need to download anything else. This guide will use Windows 10 Build 1909.
  • Xcopy работает в командной строке или PowerShell, и в этой статье предполагается, что у вас уже открыта одна из них.

Понимание команды Xcopy

Xcopy – это утилита командной строки, которая доступна по умолчанию с Windows 98. Вы можете найти этот инструмент в папке %WINDIR%\system32 с именем исполняемого файла xcopy.exe.

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

Преимущества

Есть несколько преимуществ или преимуществ использования Xcopy, которые вы узнаете по мере продвижения в этом руководстве. Но вот некоторые из преимуществ использования Xcopy.

  • Более быстрая операция копирования больших наборов файлов и каталогов.
  • Упрощает развертывание приложений.
  • Может воспроизводить структуру исходного каталога как есть.
  • Копирует файлы, сохраняя владельца и список контроля доступа (ACL).
  • Копирует и перезаписывает файлы только для чтения.
  • Может исключать файлы на основе имени файла, расширения или пути.
  • Может идентифицировать обновленные файлы, что полезно для дифференциальных резервных копий.
  • Интегрируется и используется сценариями.

Ограничения

Несмотря на все преимущества Xcopy, у него есть некоторые ограничения. Хотя эти ограничения могут и не быть критичными, хорошо знать о них заранее.

  • Не может копировать открытые файлы.
  • Нет поддержки Службы теневого копирования томов Windows (VSS). Отсутствие поддержки VSS делает Xcopy непригодным для резервного копирования живых томов операционной системы.
  • Ошибка недостатка памяти, когда длина пути плюс имя файла превышает 254 символа.

Xcopy Справка по синтаксису

Xcopy позволяет выполнять различные операции копирования файлов и папок. Но сначала вам нужно понять его синтаксис и опции. Существует множество опций, которые могут изменить способ работы Xcopy. Чтобы помочь вам осмыслить эти опции, следующие таблицы подробно их описывают.

Первое указание пути относится к исходному файлу(ам); второе указание пути относится к файлу(ам) назначения.

xcopy [source] [destination] [options]
  • [source] – Путь к файлу(ам), которые нужно скопировать (поддерживает шаблоны). Вы должны указать диск, путь и файлы, которые хотите скопировать.
  • [destination] – Путь к новому файлу(ам). Если вы не указываете путь назначения, команда скопирует файлы в тот же путь, что и исходный.
  • [options] – Могут быть любыми из следующих опций, приведенных в таблицах ниже. Вы также можете просмотреть эти опции, запустив команду xcopy /? или посетив онлайн документацию по Xcopy.

Опции источника

Switch Explanation
/A Copy files that have the archive attribute.
/M Copy files with the archive attribute set, then switches off the archive attribute at the destination. Use this option when creating routine backups.
/H Copy hidden and system files and directories. The default value is N.
/D:mm-dd-yyyy Only copies that files with modification date on or after the given date. Without using this option, the command will copy only the files whose date/time is newer than the destination.
/U Only copies the files that already exists at the destination.
/S Copies folders and subfolders recursively excluding the empty one.
/E Copies folders and subfolders recursively including the empty one.
/EXCLUDE:file1[+file2][+file3]… Specify the text file(s) containing a list of strings to match absolute file paths to exclude.

Опции назначения

Switch Explanation
/I If the destination does not exist, using this option assumes that the destination is a directory and creates it. If you omit this option, the command prompts to confirm if the destination is a directory or a file.
/R Overwrites read-only files.
/T Creates a recursive folder structure at the destination without copying the files. This option does not include copying empty folders. To include empty folders, use this option together with the /E option.
/K Preserves the file attributes during the copy. Otherwise, the command will reset read-only attributes.
/N Copies files using their short file names.
/O Copies files including ownership and access control list (ACL) information.
/X Copies files including file audit settings and ACL information (implies using /O).

Опции копирования

Switch Explanation
/W Prompts for a key press before the copy process can start.
/P Prompts (Y/N) before creating each file.
/Y Suppresses the confirmation to overwrite destination file if exists.
/-Y Prompts to confirm overwriting an existing destination file.
/V Verifies that the source and destination file sizes are identical.
/C Ignores errors and forces the command to continue copying.
/B Copies only the symbolic link but not the link target file.
/G Copies encrypted files to a destination that does not support encryption.
/J Copies files without using the buffer. This switch useful when copying very large files.
/Q Suppresses the display of file names while copying.
/F Displays the full source and destination file paths while copying.
/L Only displays which files to copy without copying them. This switch can be useful when testing Xcopy commands with multiple options to assess the expected result.
/Z Copies files in restartable mode. Using this option, the command gracefully stops copying files during network interruption. The copying will resume after re-estabslishing the network connection.

Работа с Xcopy: Примеры использования

Теперь, когда вы знакомы с синтаксисом и опциями Xcopy, пришло время начать его использовать, объединяя одну или несколько опций вместе. В следующих разделах вы изучите множество различных сценариев использования Xcopy для копирования файлов и папок.

Список файлов для копирования

Если у вас есть файловый сервер, содержащий огромное количество файлов, которые вы хотите скопировать, возможно, в резервное место, тестирование вашей команды Xcopy заранее было бы идеальным. Одна из ситуаций, когда вы захотите протестировать Xcopy, – это когда вы объединяете несколько опций Xcopy.

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

XCOPY C:\Workarea\XCopyDemo C:\Workarea\XCopyDemoFolder /L

Копирование одного файла

Самая основная операция, которую вы можете выполнять с Xcopy, – это копирование файла из источника в пункт назначения без использования каких-либо опций. Например, приведенная ниже команда скопирует текстовый файл в каталог назначения, и имя файла будет таким же.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt C:\Workarea\XCopyDemoFolder

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

XCOPY C:\Workarea\XCopyDemo\NewFile.txt C:\Workarea\XCopyDemoFolder\AnotherFile.txt

Копирование файлов в новый каталог

С помощью Xcopy вы можете копировать файлы и создавать каталог назначения “на лету”. Для этого вы должны добавить параметр /I к команде Xcopy.

Например, приведенная ниже команда копирует файлы из папки C:\Workarea\Demo в папку D:\Workarea. Если папка назначения не существует, Xcopy создает папку назначения с использованием параметра /I.

XCOPY C:\Workarea\Demo D:\Workarea /I

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

Помимо копирования файлов из одной папки в другую, Xcopy также позволяет копировать папки и файлы рекурсивно. И существует два способа выполнить рекурсивное копирование – с пустыми папками и без них.

Для копирования всех файлов и каталогов, игнорируя пустые каталоги, добавьте опцию /S в конце команды Xcopy, как показано ниже.

XCOPY C: D: /S

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

XCOPY C: D: /E

Включение скрытых и системных файлов

По умолчанию Xcopy не включает скрытые и системные файлы в операции копирования. Но если вам нужно заставить Xcopy включать скрытые и системные файлы, добавьте переключатель /H к команде.

Команда ниже рекурсивно копирует все файлы, включая скрытые и системные файлы. Эта команда также игнорирует ошибки, создает каталоги назначения и перезаписывает существующие файлы.

XCOPY C:\Workarea\Documents D:\Workarea\Documents /S /H /C /Y

Сохранение атрибута файла “Только чтение”

Другой атрибут, который может обрабатывать и сохранять Xcopy, – это атрибут “только чтение” файла. По умолчанию, когда Xcopy копирует файл с атрибутом “только чтение”, он удаляет атрибут “только чтение” файла в месте назначения. Чтобы предотвратить удаление атрибута “только чтение” Xcopy, добавьте переключатель /K к команде.

Например, команда ниже копирует файл с атрибутом “только чтение” в другое местоположение, и получившийся файл в месте назначения все равно будет иметь атрибут “только чтение”. Эта команда также перезапишет файл назначения, если файл уже существует.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt D:\Workarea /I /K /Y

В результате сохранения файла как “только чтение” Xcopy не может перезаписать этот же файл в будущих операциях копирования. Но вы можете заставить Xcopy перезаписывать файлы только для чтения, добавив переключатель /R.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt D:\Workarea /K /R /Y

Фильтрация файлов для копирования

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

Например, команда ниже копирует только файлы с расширением .cs рекурсивно из корня диска C: в корень диска E:. Эта команда также игнорирует ошибки и перезаписывает существующие файлы без запроса подтверждения.

XCOPY C:\*.cs E:\ /S /C /Y

Исключение файлов и папок из копирования

A powerful feature of Xcopy is its ability to exclude files from the copy process. To use this feature, you can leverage the /EXCLUDE switch. This switch accepts the names of the file(s) that contain the exclusion lists.

Сначала вам нужно создать или иметь файл, содержащий список исключений. Например, у вас может быть текстовый файл с именем Exclude.txt, который содержит следующие записи. Как видите, файл исключения может содержать конкретные имена файлов, расширения файлов и папки в качестве записей.

xyz.txt
Exclude.txt
.pdf
.png
\exclude\

Чтобы выполнить Xcopy с исключениями, выполните команду ниже и укажите полный путь к файлу исключения для параметра /EXCLUDE. В этой команде используется файл C:\Workarea\XCopyDemo\Exclude.txt.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /S /Y /Exclude:C:\Workarea\XCopyDemo\Exclude.txt

Результат? Xcopy копирует файлы, но пропускает файлы xyz.txt, Exclude.txt, все файлы с расширением .pdf и .png, а также все файлы в каталоге exclude.

Выполнение дифференциальной копии

Когда вам нужно создать резервные копии файлов из одного места в другое, Xcopy имеет опцию, которая позволяет выполнить дифференциальное резервное копирование. Вместо копирования всех файлов дифференциальное резервное копирование копирует только те файлы, для которых измененная дата попадает на или после указанной даты в параметре /D:m-d-y.

Например, чтобы скопировать только те файлы, дата изменения которых равна или позже 1 апреля 2021 года, выполните следующую команду. Кроме того, эта команда выполняет рекурсивное копирование, игнорирует ошибки и перезаписывает существующие файлы на месте назначения.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /D:04-01-2021 /S /C /Y

Если вы не указываете дату с помощью опции /D, команда Xcopy будет копировать только те исходные файлы, которые новее файлов на месте назначения.

Копирование файлов на основе атрибута “архив”

Обычно программы резервного копирования удаляют атрибут “архив” файла после операции резервного копирования. После изменения файла (т.е. редактирования и сохранения), Windows автоматически сбрасывает атрибут “архив” файлов.

Если вы создаете сценарий для резервного копирования файлов с использованием Xcopy, вы можете использовать атрибут “архив” для определения, следует ли копировать или резервировать файл.

Чтобы скопировать файлы с атрибутом “архив”, можно воспользоваться переключателями /A и /M. Какой из этих переключателей использовать зависит от того, хотите ли вы сохранить атрибут “архив” файла или нет.

Следующая команда выполняет рекурсивное копирование файлов только с атрибутом “архив”. Файлы на месте назначения сохранят атрибут “архив” после копирования из-за переключателя /A.

XCOPY C:\Workarea\Demo D:\Workarea\Test /A /S /Y

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

XCOPY C:\Workarea\Demo D:\Workarea\Test /M /S /Y

Сохранение информации о владельце файла и прав доступа

Представьте, что вы создаёте резервную копию всей папки профиля. Каждый файл может иметь разных владельцев или уникальные разрешения. Если вам потребуется восстановить эти файлы, вы захотите, чтобы у них остались те же владельцы и разрешения.

Таким образом, весь процесс будет казаться непрерывным, и пользователи всё ещё будут иметь доступ к файлам, как и раньше. Но прежде всего вам нужно убедиться, что вы создаёте резервные копии файлов, сохраняя существующих владельцев и доступ.

Чтобы скопировать файлы и сохранить информацию о владельце и контрольные списки доступа, добавьте параметр /O к команде xcopy, как показано ниже.

XCOPY C:\Workarea D:\Work /O /I /Y

Помимо сохранения информации о владельце и контрольных списках доступа, вы также можете включить настройки аудита файлов. Копирование настроек аудита может быть полезным, если ваша организация применяет объекты групповой политики (GPO) для аудита файлов.

Чтобы включить настройки аудита файлов при копировании с помощью Xcopy, используйте переключатель /X. Переключатель /X подразумевает также использование переключателя /O, поэтому вам не нужно использовать оба переключателя одновременно.

XCOPY C:\Workarea D:\Work /X /I /Y

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

XCOPY не только может копировать файлы между местами на одном или разных дисках, но также может копировать файлы по сети. К сожалению, копирование файлов по сети не всегда надежно. Сетевые подключения могут сталкиваться с кратковременными прерываниями и, в некоторых случаях, полной потерей соединения.

К счастью, вы можете запустить XCOPY в режиме возобновления. Это означает, что даже если процесс копирования останавливается из-за сетевой ошибки, копирование может быть возобновлено после восстановления сетевого соединения. Чтобы запустить XCOPY в режиме возобновления, вам нужно добавить параметр /Z к команде.

Например, приведенная ниже команда выполняет рекурсивное копирование файлов из папки C:\РабочаяОбласть в сетевое местоположение. Параметр /Z делает XCOPY работающим в режиме возобновления.

XCOPY C:\Workarea "\\SERVER01\Backup" /S /Z

При использовании переключателя /Z XCOPY также отображает ход копирования файлов в процентах.

Копирование файлов с использованием небуферизованного ввода-вывода

Буферизованный ввод-вывод соответствует тому, как операционная система буферизует чтение и запись на диск в кэше файловой системы. Хотя буферизация ускоряет последующие чтение и запись в тот же файл, это происходит за счет определенных затрат. В результате предпочтительным методом для копирования большого файла является небуферизованный ввод-вывод (или копирование файла “как есть”).

Этот метод копирования снижает накладные расходы кэша файловой системы и предотвращает легкую очистку кэша файловой системы большими объемами файловых данных.

Для копирования больших файлов с использованием небуферизованного ввода-вывода, вы можете добавить переключатель /J к команде Xcopy, как показано ниже.

XCOPY C:\Workarea\abc.mp4 D:\Temp /I /J

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

Как и в любых других задачах, копирование файлов не всегда возвращает 100% успешных результатов. Некоторые файлы могут быть повреждены в процессе передачи, даже если нет видимых ошибок.

С Xcopy вы можете использовать переключатель /V, чтобы проверить, что конечные и исходные файлы идентичны по размеру после копирования. Идентичные исходные и конечные файлы указывают на успешное копирование и целостность файла.

Команда ниже копирует все файлы из C:\Workarea\XCopyDemo в C:\Workarea\Backup и проверяет каждый файл с использованием переключателя /V. Переключатель /F отображает полный путь к исходным и конечным файлам.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /F /H /S /X /V

Копирование зашифрованных файлов

Xcopy также поддерживает копирование зашифрованных файлов на места, которые не поддерживают шифрование. Используя переключатель /G, Xcopy копирует зашифрованные исходные файлы и создает расшифрованные конечные файлы.

Этот режим копирования полезен, особенно при резервном копировании зашифрованных файлов на сетевые ресурсы или тома, не поддерживающие Encrypting File System (EFS).

Xcopy C:\Workarea\XCOPYDemo C:\Workarea\XCOPYDemoFolder /S /G

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

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

Для этого выполните команду Xcopy с переключателем /T. Использование переключателя /T заставит Xcopy копировать только структуру дерева каталогов в пункт назначения, игнорируя пустые каталоги.

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

Xcopy C:\Workarea\XCOPYDemo C:\Workarea\XCOPYDemoFolder /T /E

Общие ошибки

Если что-то может пойти не так, оно, вероятно, и пойдет. То же самое касается копирования файлов независимо от объема. Ниже приведены общие ошибки Xcopy, с которыми вы можете столкнуться.

Неверное количество параметров

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

Например, если путь выглядит как C:\Documents and Settings, введите его как “C:\Documents and Settings”.

Невозможно выполнить циклическое копирование

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

Ошибка анализа

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

Ниже приведен пример команды с пропущенным символом закрывающей двойной кавычки в пути назначения.

Xcopy C:\Workarea "C:\Workarea\XCopy Demo /S /I /E /Y

Коды завершения

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

Оболочка команд сохраняет коды завершения в переменной %ErrorLevel%. Ваш код может проверить значение этой переменной, чтобы определить результат операции Xcopy.

Ниже приведена таблица со списком всех кодов завершения Xcopy.

Exit Code Purpose
0 This exit code means that there were no errors.
1 This exit code means that Xcopy did not find any files to copy.
2 This exit code means that the Xcopy was terminated by pressing CTRL+C.
4 This exit code means that an initialization error happened either because of insufficient memory or disk space or because you’ve entered invalid syntax.
5 This exit code means that there was a disk write error.

Скрипты с использованием Xcopy

Помимо интерактивного использования Xcopy, вы можете получить больше выгод, если используете его для автоматизации задач с помощью скриптов. Ниже приведены несколько примеров, демонстрирующих, как использовать Xcopy в скриптах.

Пакетный скрипт Xcopy для копирования данных с обработкой ошибок

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

Чтобы создать пакетный файл, откройте текстовый или кодовый редактор по вашему выбору, скопируйте приведенный ниже код, вставьте его в редактор и сохраните файл как copycomplete.bat.

@echo off
rem This batch file copies all source
rem files in all directories and sub-directories from the source
rem path (%1) to the destination path (%2)

xcopy %1 %2 /s /e

if errorlevel 4 goto lowmemory
if errorlevel 2 goto abort
if errorlevel 0 goto exit

:lowmemory
echo Insufficient memory to copy files or
echo invalid drive or command-line syntax.
goto exit

:abort
echo You pressed CTRL+C keys due to which the copy operation has been aborted.
goto exit

:exit

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

pycomplete.bat xcopydemo xcopydemofolder
Running an Xcopy batch file

Сценарий пакетного файла Xcopy для перемещения данных

У Xcopy нет встроенной функциональности для перемещения файлов и папок из источника в пункт назначения. Однако, как временное решение, вы можете создать сценарий, который сначала скопирует файлы с помощью Xcopy, а затем удалит их из источника.

Ниже приведен код, который скопирует файлы в пункт назначения. И если процесс копирования завершился успешно, сценарий удалит файлы из источника. Скопируйте приведенный ниже код и сохраните его в новом файле с именем movefiles.bat.

Rem Batch file to move files

Xcopy /D /V %1 %2

Rem If the Xcopy process is successful (0), then delete the files at the source.
if errorlevel 0 (
echo Xcopy process completed successfully
del /Q %1
exit /B
)

Rem Errorlevel is not 0
echo The copy process has failed.

Затем, чтобы выполнить пакетный файл movefiles.bat, вызовите его имя в командной строке или PowerShell, за которым следуют пути источника и пункта назначения, как вы делали в предыдущем примере.

movefiles.bat xcopydemo xcopydemofolder

Вывод

Если ваша работа включает копирование файлов оптом или создание резервных копий файлов, Xcopy – отличный инструмент, который поможет сделать вашу работу проще. Xcopy обеспечивает точные и быстрые результаты копирования файлов с множеством опций для настройки его поведения в соответствии с вашими требованиями.

Source:
https://adamtheautomator.com/xcopy/