В отличии от утилиты COPY, команда XCOPY тоже дает возможность скопировать файл через командную строку, но имеет большее количество функции. Однако, стоит отметить, что XCOPY дает возможность работать лишь с файлами и каталогами, но не с устройствами (например, принтер). Но, как всегда, сначала немного лирики…
В былые времена у меня был диск с операционной системой Windows XP Sp1, в то время не было установочных дисков с авто запуском, поэтому приходилось сначала входить в командную оболочку, а уже потом запускать на диске установочный файл. Диск был довольно уже пошарпан, виднелись маленькие дырочки, но как не странно, с помощью старого доброго Волков Коммандера мне удавалось скопировать все файлы через командную строку, хотя и не с первой попытки. Мало того, порой были времена когда система слетала под корень, и мне приходилось вручную производить копирование с одного винта на другой, занимало это сутки…
Командная строка xcopy
XCOPY источник [результат] [/A | /M] [/D[:дата]][/P] [/S [/E]] [/V]
[/W][/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R][/T] [/U] [/K] [/N] [/O]
[/X] [/Y] [/-Y] [/Z] [/EXCLUDE:файл1[+файл 2][+ файл 3]…]
Источник – указываем путь к файлу (файлам), который нужно скопировать.
Результат – указываем место, куда нужно скопировать файл через командную строку. Если данный параметр отсутствует, то документы будут дублироваться в текущий каталог.
/V – как и в предшествующей версии, данный параметр отвечает за проверку телесности документов, но, уже не является обязательным, поскольку проверка осуществляется самой системой. Он остался лишь для совместимости с предыдущими версиями MS-DOS.
/EXCLUDE:файл1[+файл 2][+ файл 3]… – позволяет исключить несколько файлов или папок из процесса копирования. Тут все просто, надо только указать имена объектов, которые следует исключить, но, нельзя использовать спецсимволы, типа «*» и «?». Ключи файл1, файл2, … указывают на документы, в которых прописаны строки, каждая строка должна находится в отдельной линии. Если же хоть одна из строк будет совпадать с любой частью абсолютного пути копируемого документа, то скопировать с помощью командной строки данный файл не получится. Допустим в каталоге D:DATA есть три документа с расширением txt: data1.txt, data2.txt и data3.txt. Откроем CMD и пропишем в ней следующие команды:
echo data1.txt>exclude.txt
echo data2.txt>>exclude.txt
В данном примере мы создали в текущем каталоге текстовый документ exlude.txt, в котором прописаны две строчки data1.txt и data2.txt. Символ «>>» отличается от символа «>» только тем, что дописывает данные в конец документа, а не затирает все содержимое новой информацией. Ладно, теперь попробуем выполнить следующие директивы:
XCOPY *.txt D:DATA /EXCLUDE: exclude.txt – в данном примере из текущей папки в папку D:DATA мы скопировали все документы с расширение txt кроме файлов data1 и data2.
Другой пример, если указать строки вида OBJ или .OBJ, то из процесса будут исключены все объекты из папки OBJ и все объекты с расширением .OBJ.
/Z – позволяет дублировать сетевые документы с возобновлением.
Как известно, файловая система приписывает каждому файлу/документу владельца, как правило, это тот пользователь, который создал данный документ. При использовании команд COPY и XCOPY командной строки информация о старом владельце затирается, и владельцем копии становится тот юзер, под учетной записью которого собственно и производилось копирование файлов из командной строки.
/А и /M – задаем режим для архивных документов. Первый ключ после дублирования объекта оставляет у него атрибут «Архивный», второй же ключ отключает этот атрибут по завершении процесса манипуляций.
/O – данный параметр позволяет скопировать только те данные, которые были изменены не ранее указанной даты (дата у указывается в атрибуте /D[:дата], если сама дата не указана, то копирование будет производиться, только если источник новее результата ). Например:
XCOPY "С:My document*.*" "D:RESERVEMy document" /D
Тут будет произведено копирование только тех файлов через командную строку, которые были изменены со времени последнего подобного манипулирования или которых вообще не было в D: RESERVEMy document.
/S – данный ключ указывает, что кроме документов надо произвести и копирование папки, при условии, что она (они) не является пустой.
/Е – данный ключ подобен предыдущему, с той только разницей, что позволяет произвести копирование пустой папки через командную строку.
/W – будет включен режим запроса на нажатие любой клавиши перед началом дублирования.
/C – процесс копирования будет продолжен, даже если произошла ошибка
/I – Данный ключ говорит, что объект назначения должен быть каталогом. Например, если задать ключ /I в команде копирования всех объектов с расширением txt из текущего каталога в несуществующий еще подкаталог TEXT:
XCOPY *.txt TEXT /I
то подкаталог TEXT будет создан без дополнительных запросов.
/Q – этот ключ не будет отображать имена во время процесса
/F – этот ключ будет отображать полные пути источника и результата во время процесса
/L – это ключ всего-навсего отобразит те документы, которые надо скопировать, при этом сам процесс не произойдет.
/H – позволяет дублировать скрытые и системные документы.
/K — заменять объекты с атрибутом “Только для чтения”
/T – создает слепок структуры копируемых папок, но, самих документов не копирует, также не включаются пустые каталоги. Для того чтобы все же включить пустые каталоги и подкаталоги, нужно использовать комбинацию ключей /T /Е.
/U – обновляет содержимое каталога, то есть, копирует лишь те файлы, что уже имеются в каталоге.
/Y и /-Y определяют, нужно ли запрашивать подтверждение перед заменой. /Y означает, что такой запрос нужен, /-Y — не нужен.
/N – копирование с помощью командной строки с использованием сгенерированных коротких имен.
Как уже упоминалось выше, при использовании утилит COPY и XCOPY информация о прежнем владельце затирается. Что бы этого не происходило, можно воспользоваться командой SCOPY из пакета Resource Kit, которая имеет следующий синтаксис:
SCOPY источник [результат] [/О] [/A] [/S]
/О – позволяет дублировать информацию о владельце
/А – дублирование информации связанной с аудитом доступа к файлу или каталогу
/S – копирование файлов через командную строку из всех подкаталогов указанного каталога.
Запись в потоки NTFS
И еще, хотелось бы вспомнить о таком понятии как «копирование в потоки». Данный вопрос я частично затронул в статье с примерами по Windows Script Host при описании методаCreateTextFile объект FileSystemObject. Данная возможность предоставляется только на файловой системе NTFS. В простом варианте суть дела такова, к каждому документу или диску можно привязать свой поток, и записать информацию непосредственно в поток, то есть, информация будет записана, но сам документ не изменит своего размера. Давайте проделаем простенький эксперимент, пропишем в командной строке:
echo “Hellow, word”>new.txt:potok.txt – в данном примере мы создали текстовый документ new.txt, а фразу Hellow, word скопировали в поток potok.txt. Если выполнить команду notepad new.txt, то мы ничего не увидим, но, если выполнить так:
notepad new.txt.potok.txt – то мы увидим заветную фразу Hellow, word.
Командная строка xcopy команда.
При удалении файла, удаляется и поток, привязанный к нему. Есть один довольно примитивный способ узнать, что в нашем якобы пустом документе что-то зашито, это поместить его в архив, как результат, нулевой размер документа увеличится при архивировании.
‘/Y и /-Y определяют, нужно ли запрашивать подтверждение перед заменой. /Y означает, что такой запрос нужен, /-Y — не нужен.’
неверно…
/Y — это отвечать ‘да’ на замену файла
/-Y — отвечать ‘нет’ на запрос о замене файла
…и это тоже неверно.
/Y — заменять файлы без запроса
/-Y — запрашивать подтверждение замены