Команда XCOPY копирование файлов с расширенным сервисом

Команда XCOPY реализована во всех версиях PC-DOS и MS-DOS начиная с версии 3.2. Она позволяет выполнять следующие операции:
-    копировать каталоги со всеми подкаталогами и размещенными в них файлами, а следовательно, и магнитные диски в целом (за исключением скрытых файлов);
-    создавать в процессе копирования отсутствующие на целевом диске каталоги файлов;
-    копировать файлы выборочно, в зависимости от состояния архивного атрибута файлов;
-    копировать только файлы, модифицированные позднее указанной даты;
получать копии, расположенные на нескольких дискетах;
-    использовать всю свободную оперативную память для буферизации операций обмена с дисками при копировании.


Команда XCOPY реализована в виде автономной программы, загрузочный модуль которой занимает в памяти около 11 Кбайт, что эквивалентно примерно половине объема интерпретатора командной строки COMMAND.COM, занимающего около 25 Кбайт (для версии 3.3). После сопоставления этих цифр становится ясно, что реализация функций XCOPY в резиденте системы не целесообразна.

Следует отметить, что XCOPY в отличие от COPY не поддерживает терминальные устройства последовательного доступа, так как в арсенале внешнего сервиса DOS эти средства имеются для каждого типа устройств в отдельности.
По сравнению с командой BACKUP, описанной ниже, XCOPY обладает существенным достоинством - возможностью доступа к отдельным файлам копии.

НАЗНАЧЕНИЕ. Команда XCOPY предназначена для копирования файлов. Однако по сравнению с COPY она предоставляет пользователю существенно более широкие сервисные возможности, а также позволяет повысить скорость передачи файлов за счет более рациональной буферизации ввода-вывода при обмене с магнитными дисками.

ОПИСАНИЕ. Алгоритм выполнения команды XCOPY аналогичен алгоритму COPY, за исключением буферизации обмена с дисками. COPY читает файлы только по одному и сразу после считывания информации из очередного исходного файла, на магнитном диске формируется соответствующий целевой файл. XCOPY считывает столько файлов, сколько возможно разместить в буфере, занимающем всю свободную оперативную память и только потом записывает его содержимое в целевые файлы.
Это отличие сказывается на времени копирования файлов тем существеннее, чем больше файлов переписывается за одну команду и чем меньше их размеры. Например, при перезаписи пяти-семи небольших файлов время копирования по команде XCOPY может оказаться в полтора-два раза меньше, чем при использовании команды COPY.
Сокращение времени обмена происходит из-за уменьшения количества вспомогательных физических операций доступа к данным, выполняемых при обмене с магнитными дисками, таких как: выбор рабочей поверхности (загрузка/разгрузка магнитных головок), включение/выключение двигателя, позиционирование магнитных головок и некоторых других. Перечисленные операции - наиболее длительные по времени, что ведет к существенному увеличению быстродействия операции копирования.
Если за именем целевого накопителя в командной строке следует еще одно имя, XCOPY выдает уточняющий запрос:
Does "имя" specify a file name or directory name on the target (F = file, D = directory)?
(Как трактовать введенное имя - как имя каталога или как имя файла? F - файл, D - каталог).
Причина вывода этого запроса - неоднозначность ситуации, в которой невозможно определить, является ли указанное имя именем файла или каталога. Например, при вводе команды, приведенной в примере 38, система не знает, что означает специфицированное имя G2 - имя целевого файла или имя целевого каталога. В случае существования каталога с именем G2 запроса бы не было и XCOPY однозначно разместила бы целевой файл под именем G2.K22 в каталоге G2.

Для получения копии, расположенной на двух или более дискетах, необходимо провести следующие операции:
-    установить архивный атрибут для всех перезаписываемых файлов с помощью команды ATTRIB;
-    ввести команду копирования XCOPY с ключом /М;
-    после появления сообщения
Insufficient disk space
(свободное пространство на диске отсутствует)
или кода завершения 4, загрузить свободную целевую дискету;
-    повторить команду XCOPY с теми же параметрами.
В процессе выполнения этой операции смена дискет повторяется до тех пор, пока не будет скопирована вся необходимая информация.

Работая с командой XCOPY, нужно учитывать следующие ограничения:
-    XCOPY копирует файлы только с магнитных носителей и не работает с терминальными устройствами;
-    XCOPY не копирует файлы, защищенные от записи, а также скрытые файлы;
-    в качестве имени файла по умолчанию XCOPY использует шаблон *.* ;
-    ключ /А в командах COPY и XCOPY имеет разное значение;
-    если символы переадресации установлены в целевой спецификации команды, переадресовываются только сообщения, выдаваемые самой командой XCOPY;
-    при копировании файлов на гибкие магнитные диски длина копируемого файла не должна превышать размера свободного пространства целевого диска (в отличие от команды BACKUP).
Коды завершения команды XCOPY:
0    - нормальное завершение;
1    - не найдено ни одного файла для копирования;
2    - преждевременное завершение после ввода пользователем CTRL/C (CTRL/BREAK);
4    - ошибка инициализации, вызванная отсутствием достаточного свободного пространства на магнитном диске;
5    - фатальная ошибка.
Причины формирования кода 4:
-    не готов целевой привод магнитных дисков;
-    в выводной спецификации командной строки допущена синтаксическая ошибка;
-    не найден каталог;
-    диск переполнен.

Причина установки кода 5 - фатальная ошибка, возникшая при обмене с магнитным диском. В подобных случаях стандартные драйверы ввода-вывода инициируют прерывание 24Н. Если пользовательская программа не переадресовала на себя вектор прерывания 24Н, то система выведет сообщение
Error reading (or writing) drive x: Abort, Ignore, Retry? (Ошибка при чтении (или записи) на диске х: Удалить, Игнорировать, Повторить?).
Если ошибка произошла при обмене с жестким диском, то дополнительно выведется четвертый вариант выхода из сбойной ситуации:
Fail?
(Отказаться?).
Код 5 устанавливается, если пользователь в ответ на данный запрос выбрал вариант ABORT.
Код завершения может быть проанализирован с помощью переменной ERRORLEVEL и команды IF в пакетном файле.
Команда XCOPY внешняя, выполняется программой, загрузочный модуль которой содержится в файле XCOPY.EXE.

ФОРМАТ.
[маршрут1 XCOPY спец.файла1 [спец.файла2] [/D-.дд-мм-гг] [/A] [/EJ £/М] [/Р] [/S] [/V] [/W]
Спецификация маршрут - каталог, содержащий файл загрузочного модуля программы XCOPY. Она необходима, если этот каталог не текущий и не альтернативный.

Спец.файла1 - спецификация копируемых файлов, включающая имя накопителя, маршрут, имена и расширения имен файлов. Шаблоны "*" и "?" разрешены. Если в данной спецификации имя и расширение имени файла не указаны, то по умолчанию принимается *.* .

Спец.файла2 - спецификация целевых файлов. Она включает имя накопителя, маршрут, имена и расширения имен файлов. Шаблоны "*" и "?" разрешены.
Ключ /А позволяет копировать только файлы, для которых установлен архивный атрибут.
Ключ /0:дд-мм-гг устанавливает режим копирования только файлов, модифицированных за период времени начиная : указанного числа и до текущего момента.
Ключ /Е задает режим, в котором на целевом накопителе :оздаются подкаталоги, соответствующие подкаталогам источника (в случае их отсутствия), даже если каталоги на исходном диске пустые (не содержат файлов). Этот ключ нужно ис- тользовать вместе с ключом /S.

По ключу /М, как и по ключу /А, копируются только фхивные файлы, но у целевых файлов сбрасывается архивный [трибут.
Ключ /Р - вывод запросов на подтверждение необходимо- ти копирования каждого файла.
Ключ /S - копирование не только файлов текущего каталога, но и файлов, содержащихся в подкаталогах. Соответствующие подкаталоги на целевом накопителе создаются автоматически.
Ключ /V - установка режима верификации при записи на диск на время копирования (аналогично режиму VERIFY ON).
Ключ /W - запуск указанной операции копирования файлов только после ответа на дополнительную подсказку. В этом случае программа XCOPY перед началом копирования выдаст следующее сообщение:
Press any key when ready to start copying files
(Для запуска операции копирования файлов нажмите какую-
нибудь клавишу).

Отмена режима копирования обеспечивается кодом CTRL- С, запуск - нажатием любой алфавитно-цифровой клавиши, пробела или <Enter>.

Пример 38.
С:\>хсору g2.k22 a:g2
Does G2 specify a file name or director^' name on the target (F - file, О - directory)?
После ввода "F" файл будет скопирован, о чем выведется сообщение
Reading source file(s)... G2.K22
1 File(s) copied
C:\>

В результате в корневом каталоге на накопителе А: появится файл-копия с именем G2 без расширения имени файла.
Пример 39.
С:\>хсору g2.k22 a:g2
Does G2 specify a file name or directory name on the target (F - file, D - directory)?

После ввода "D" файл будет скопирован и выведется сообщение
Reading source fiie(s)... G2.K22
1 File(s) copied
C:\>

В результате в корневом каталоге на приводе А: появится каталог с именем G2, содержащий целевой файл G2.K22 .

Пример 40.
С:\>хсору con: read.txt
CON File not found
0 File(s) copied
C:\>

В этом примере показана попытка ввода с клавиатуры. Так как команда XCOPY с консолью не работает, она рассматривает имя консоли, как обычное имя файла. Такой файл отсутствует, о чем и свидетельствует сообщение об ошибке.
Пример 41. С:\>хсору *.* а:
Reading source file(s)...
G2.K22
G1.K22
G6.K22
G4.K22
G5.K22
G0.K22
G3.K22
7 File(s) copied
C\:>


Обсудить вопрос в студенческом форуме

 

Сайт содержит информацию о учебном заведении и студенческой общине и не является официальным