Команда COPY для копирования одного или нескольких файлов.
Команда COPY при работе в командной строке позволяет копировать один или несколько файлов. Команда имеет синтаксис: COPY[/D][/V][/N][/Y | /-Y][/Z][/L][/A | /B]источник[/A | /B][+ источник[/A | /B] [+ . ]][результат [/A | /B]]. Источником является имя копируемого файла, а результатом является каталог, в который будет помещена копия этого файла и/или имя создаваемого файла.
Для примера, создадим на диске «С» какой-нибудь файл (я создал текстовый файл «robot.txt»), а на диске «D» какую-нибудь папку (я создал папку «folder1»). Тогда команда для копирования файла «robot.txt» в папку «folder1» выглядит так: copy robot.txt d:\folder1
Если необходимо скопировать файл, изменив при этом его имя, необходимо записать следующую команду: copy robot.txt d:\folder1\file.txt В этом случае, файл «robot.txt» будет скопирован в папку «folder1», но уже с именем «file.txt».
Для того чтобы скопировать все файлы с выбранным расширением, необходимо вместо названия файла поставить звездочку «*». Например, создадим на диске «С» какую-нибудь папку (я создал папку «papka») и скопируем в нее все текстовые файлы из папки «folder1», расположенной на диске «D». Команда будет иметь вид: copy d:\folder1\*.txt c:\papka
Если в качестве [результата] не указывать каталог, то команда copy скопирует файл (или файлы) и поместит их в текущем каталоге. При этом скопированные файлы будут иметь то же имя, дату и время создания, что и исходный файл. Например, создадим в папке «folder1», расположенной на диске «D» текстовый файл с именем «robot1.txt». После этого в командной строке изменим текущий каталог с «C:\>» на «C:\Papka». Тогда команда copy d:\folder1\robot1.txt скопирует файл «robot1.txt» из папки «folder1» и поместит его в текущем каталоге, т.е. в папку «papka», расположенную на диске «C». Причем, имя, дата и время создания скопированного файла будет идентично исходному файлу.
Для того чтобы скопировать все файлы из определенного каталога, необходимо вместо названия файла поставить звездочку «*» и вместо расширения файла поставить звездочку «*». Например, создадим в папке «folder1» несколько файлов, имеющих различные расширения (документ Word, архив Rar и т.д.). Тогда команда для копирования всех файлов из папки «folder1» на диск «C» будет выглядеть: copy d:\folder1\*.* c:\
[Источником] или [результатом] копирования могут выступать не только файлы, но и различные устройства компьютера. В Windows поддерживаются следующие имена устройств:
- LPT1 – LPT3 (параллельные порты).
- COM1 – COM3 (последовательные порты).
- CON (терминал, при выводе это экран компьютера, при вводе – клавиатура).
- PRN (принтер).
- AUX (устройство, подсоединяемое к последовательному порту 1).
Например, с помощью командной строки и команды «copy» можно создать текстовый файл и записать в него информацию: copy con f1.txt . Команда copy con f1.txt создаст текстовый файл «f1.txt» и скопирует в него символы, которые вы будете вводить с клавиатуры.
После ввода команды copy con f1.txt нажимаем Enter и вводим слова, которые необходимо сохранить (я ввел command com). После ввода необходимо поставить признак конца файла (нажать Ctrl+Z).
C помощью команды copy можно объединять несколько файлов в один файл. Например, создадим на диске «C» два файла f2.txt и f3.txt (файл f1.txt мы создали ранее) и запишем в эти файлы какую-нибудь информацию. Тогда команда copy f1.txt+f2.txt+f3.txt d:\f4.txt скопирует содержимое файлов «f1.txt», «f2.txt», «f3.txt» в файл «f4.txt», который будет автоматически создан на диске «D».
Если при объединении файлов не указывать файл — [результат], то вся информация будет сохранена в первом файле. Например, команда copy f1.txt+f2.txt+f3.txt добавит к содержимому файла f1.txt содержимое файлов f2.txt и f3.txt
Ключ /Y отключает вывод сообщения о замене файлов. По умолчанию, при копировании файлов, если такой файл существует, то на экран выводится сообщение с предупреждением о замене. Пользователь может согласиться с заменой (нажать Y) или не согласиться (нажать N). Ключ /Y отключает это сообщение и копирование происходит сразу. Для примера создадим на диске «C» файл vov.txt и скопируем его на диск «D»: copy vov.txt d:\
Затем скопируем этот файл еще раз. При этом выводится сообщение «Заменить d:\vov.txt [Yes (да)……»
После этого скопируем файл еще раз, употребив ключ /Y. Сообщение выводиться не будет.
Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD. Т.е. по умолчанию, при замене файлов сообщение выводиться не будет. В этом случае, для того чтобы сообщение выводилось необходимо использовать ключ /-Y.
Копирование файлов с помощью командной строки Windows
Одна из команд, которую вы можете сделать из командной строки,чтобы скопировать файлы.
Команда копирования командной строки – COPY, и она принимает два (или более) параметра.
Первый параметр указывает файл, который должен быть скопирован, а второй параметр указывает, где файл должен быть скопирован.
Итак, скажем, у вас есть файл под названием «C: \ Temp \ BatFun.bat», и вы хотите скопировать его в «C: \ Bat \ BatFun.bat». В командной строке введите следующее:
Файл BatFun.bat в каталоге \ Temp остается там, и его копия создается в каталоге \ Bat.
Конечно, вы можете указать любое имя, которое вам нравится для адресата, поэтому у вас может быть файл \ Temp \ BatFun.bat, который вы разрабатываете и тестируете, но как только вы его удовлетворите, вы можете скопировать его на свой \ Bat и присвоить ему имя DirList.bat.
Это достигается путем простого изменения имени целевого параметра:
Вы можете использовать подстановочный знак для копирования нескольких файлов за раз. Предположим, у вас есть несколько файлов .bat в каталоге \ Temp, которые должны работать вместе, и вы хотите скопировать их все в каталог \ Bat.
Возможно, файлы называются C: \ Temp \ Dir1.bat, C: \ Temp \ Dir2.bat и C: \ Temp \ Dir3.bat. Чтобы скопировать их все в каталог \ Bat, команда будет следующей:
Символ подстановки «?» обозначает ровно один фактический символ в исходном параметре.
Обратите внимание, что вам не нужно указывать что-либо, кроме целевого каталога (без обратной обратной косой черты) в качестве второго параметра.
Это происходит потому, что COPY автоматически использует имя файла, указанное первым параметром, в качестве имени файла, которое будет использоваться в каталоге \ Bat.
Другими словами, вы получите Dir1.bat, Dir2.bat и Dir3.bat в каталоге C: \ Bat.
Команда COPY также может использоваться для конкатенации (объединения) файлов.
Это делается путем указания файлов, которые должны быть объединены в качестве исходного параметра, но разделенных знаками плюс.
Затем вы указываете точно одно имя файла в качестве параметра назначения.
Все файлы, разделенные знаками плюса, будут добавляться друг к другу, указывается порядок и создается конкатенированный файл, где указывает параметр назначения.
Поэтому, возможно, у вас есть несколько текстовых файлов в каталоге C: \ Temp, называемом Text1.txt, Text2.txt и Text3.txt.
Вы хотите объединить их в главный файл (мы также поместим его в каталог \ Temp), который называется TextAll.txt.
Это можно сделать, используя следующую команду:
Или вы можете дать пальцам перерыв и использовать подстановочные знаки для достижения той же цели:
Поэтому вам не нужно использовать знаки плюса для разделения исходных файлов.
На самом деле вам просто нужно иметь несколько исходных файлов (независимо от того, разделены ли они знаками плюс или указаны с помощью подстановочных знаков) и ровно один файл назначения.
Как и в большинстве операторов командной строки, существуют ключи, которые можно использовать с командой COPY, чтобы указать определенные типы поведения.
Вы можете отобразить полный синтаксис команды, просто вызвав его и добавив “/?” переключитесь так:
Если посмотреть на этот вывод, вы можете указать «/ Y», например, чтобы сообщить COPY, чтобы не спрашивать вас о перезаписи существующего файла.
Утилиты xcopy и scopy — скопировать файл или папку через командную строку
В отличии от утилиты COPY, команда XCOPY тоже дает возможность скопировать файл через командную строку, но имеет большее количество функции. Однако, стоит отметить, что XCOPY дает возможность работать лишь с файлами и каталогами, но не с устройствами (например, принтер). Но, как всегда, сначала немного лирики…
В былые времена у меня был диск с операционной системой Windows XP Sp1, в то время не было установочных дисков с авто запуском, поэтому приходилось сначала входить в командную оболочку, а уже потом запускать на диске установочный файл. Диск был довольно уже пошарпан, виднелись маленькие дырочки, но как не странно, с помощью старого доброго Волков Коммандера мне удавалось скопировать все файлы через командную строку, хотя и не с первой попытки. Мало того, порой были времена когда система слетала под корень, и мне приходилось вручную производить копирование с одного винта на другой, занимало это сутки…
Командная строка xcopy
XCOPY источник [результат] [/A | /M] [/D[:дата]][/P] [/S [/E]] [/V]
[/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 команда.
При удалении файла, удаляется и поток, привязанный к нему. Есть один довольно примитивный способ узнать, что в нашем якобы пустом документе что-то зашито, это поместить его в архив, как результат, нулевой размер документа увеличится при архивировании.
Спасибо за внимание. Автор блога Владимир Баталий