Иногда хочется хочется не только любви, славы и карьеры, а еще и некоторой автоматизации.
Опять же по примеру вернемся немного к основам.
Хочу рассказать о том, как написать простой батник для резервного копирования из определенного источника по указанному пути.
Копирует файлы и каталоги, включая подкаталоги. Ниже приведен синтаксис работы.
источник Обязательный параметр. Задает местонахождение и имена файлов для копирования. Параметр должен задавать или диск, или путь. результат Задает место, куда будут скопированы файлы. Параметр может включать имя диска с двоеточием, имя каталога, имя файла или их комбинацию. /w Выводит следующее сообщение с ожиданием подтверждения начала копирования:
Нажмите любую клавишу, чтобы начать копирование файлов
/p Запрашивает подтверждение при создании каждого файла-результата. /c Игнорирует ошибки. /v Проверяет каждый скопированный файл на соответствие его оригиналу. /q Отменяет вывод на экран сообщений команды xcopy . /f Выводит имена исходных файлов и файлов-результатов в процессе копирования. /l Отображает список копируемых файлов. /g Создает незашифрованные файлы-результаты. /d [: мм-дд-гггг ] Копирует только файлы, измененные не ранее заданной даты. Если не включить значение мм-дд-гггг , команда xcopy копирует все файлы-источники , которые новее существующих файлов-результатов . Эта возможность позволяет обновлять только измененные файлы. /u Копирует (обновляет) только те файлы-источники , которые уже существуют в каталоге результата . /i Если источником является каталог или источник содержит подстановочные знаки и результат не существует, команда xcopy считает, что результат - это имя каталога, и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy запрашивает подтверждение, является ли параметр результат каталогом или файлом. /s Копирует каталоги и подкаталоги, если они не пусты. Если параметр /s не задан, команда xcopy будет работать только с одним каталогом. /e Копирует все подкаталоги, включая пустые. Параметр /e используется с параметрами /s и /t . /t Копирует только структуру подкаталога (т. е. дерево), а не файлы. Для копирования пустых каталогов следует задать ключ /e . /k Копирует файлы с атрибутом «только для чтения» с сохранением этого атрибута для скопированных файлов, оригиналы которых имеют этот атрибут. По умолчанию команда xcopy удаляет атрибут «только для чтения». /r Копирует файлы с атрибутом «только для чтения». /h Копирует системные и скрытые файлы. По умолчанию команда xcopy не копирует системные и скрытые файлы. /a Копирует только те файлы, которые имеют установленный атрибут «архивный». При использовании параметра /a атрибут "архивный" у исходных файлов не меняется. Сведения об установке атрибутов с помощью команды attrib см. по ссылке «». /m Копирует только те файлы, которые имеют установленный атрибут «архивный». В отличие от параметра /a , параметр /m очищает атрибут «архивный» у скопированных файлов. Сведения об установке атрибутов с помощью команды attrib см. по ссылке «». /n Копирует с использованием коротких имен файловой системы NTFS. Параметр /n требуется при копировании из файловой системы NTFS в файловую систему FAT или когда на диске-результате требуется использование соглашения об именах файлов как в файловой системе FAT (8.3). Файлы могут записываться в файловую систему FAT или NTFS. /o Копирует сведения о принадлежности файлов и избирательной таблице управления доступом (DACL). /x Копирует сведения о параметрах аудита файла и системной таблице управления доступом (SACL) (подразумевается наличие /p ). /exclude: файл1 [+ [файл2 ]][+ [файл3 ]] Определяет список файлов, содежащих строки. /y Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. /-y Выдает запрос на подтверждение перезаписи существующего конечного файла. /z Копирует по сети в режиме перезапуска. /? Отображает справку в командной строке.Создаем тестовый файл с содержанием:
xcopy C:\сайт\copy C:\сайт\backup /f /i /y /sГде C:\сайт\copy — то что мы копируем, а C:\itescforu.ru\backup — путь куда копируем.
Переименовыем файл из.txt в.bat и при необходимости запускаем 🙂
www.сайтУказанные при описании команды COPY проблемы можно решить с помощью команды XCOPY, которая предоставляет намного больше возможностей при копировании. Необходимо отметить, что XCOPY может работать только с файлами и каталогами, но не с устройствами.
Синтаксис команды:
Команда XCOPY имеет множество ключей, ниже дано описание некоторых из них.
Ключ /D[:[дата]] позволяет копировать только файлы, измененные не ранее указанной даты. Если параметр дата не указан, то копирование будет производиться только если источник новее результата.
Например, команда
XCOPY "C:\Мои документы\*.*" "D:\BACKUP\Мои документы" /D
скопирует в каталог "D:\BACKUP\Мои документы" только те файлы из каталога "C:\Мои документы", которые были изменены со времени последнего подобного копирования или которых вообще не было в "D:\BACKUP\Мои документы".
Ключ /S позволяет копировать все непустые подкаталоги в каталоге-источнике.
С помощью ключа /E можно копировать все подкаталоги, включая и пустые.
Если указан ключ /C , то копирование будет продолжаться даже в случае возникновения ошибок. Это бывает очень полезным при операциях копирования, производимых над группами файлов, например, при резервном копировании данных.
Ключ /I важен для случая, когда копируются несколько файлов, а файл назначения отсутствует. При задании этого ключа команда XCOPY считает, что файл назначения должен быть каталогом. Например, если задать ключ /I в команде копирования всех файлов с расширением txt из текущего каталога в несуществующий еще подкаталог TEXT,
XCOPY *.txt TEXT /I
то подкаталог TEXT будет создан без дополнительных запросов.
Ключи /Q , /F и /L отвечают за режим отображения при копировании. При задании ключа /Q имена файлов при копировании не отображаются, ключа /F - отображаются полные пути источника и результата. Ключ /L обозначает, что отображаются только файлы, которые должны быть скопированы (при этом само копирование не производится).
С помощью ключа /H можно копировать скрытые и системные файлы, а с помощью ключа/R - заменять файлы с атрибутом "Только для чтения".
Например, для копирования всех файлов из корневого каталога диска C: (включая системные и скрытые) в каталог SYS на диске D:, нужно ввести команду:
XCOPY C:\*.* D:\SYS /H
Ключ /T позволяет применять XCOPY для копирования только структуры каталогов источника, без дублирования находящихся в этих каталогах файлов, причем пустые каталоги и подкаталоги не включаются. Для того, чтобы все же включить пустые каталоги и подкаталоги, нужно использовать комбинацию ключей/T /E .
Используя XCOPY можно при копировании обновлять только уже существующие файлы (новые файлы при этом не записываются). Для этого применяется ключ /U. Например, если в каталоге C:\2 находились файлы a.txt и b.txt, а в каталоге C:\1 - файлы a.txt, b.txt, c.txt и d.txt, то после выполнения команды
XCOPY C:\1 C:\2 /U
в каталоге C:\2 по-прежнему останутся лишь два файла a.txt и b.txt, содержимое которых будет заменено содержимым соответствующих файлов из каталога C:\1.
Если с помощью XCOPY копировался файл с атрибутом "Только для чтения", то по умолчанию у файла-копии этот атрибут снимется. Для того, чтобы копировать не только данные, но и полностью атрибуты файла, необходимо использовать ключ /K .
Ключи /Y и/-Y определяют, нужно ли запрашивать подтверждение перед заменой файлов при копировании./Y означает, что такой запрос нужен,/-Y - не нужен.
В прошлом уроке мы рассмотрели команду COPY, предназначенную для копирования одного или нескольких файлов. Эта команда имеет ряд недостатков. Например, с ее помощью нельзя скопировать системные и скрытые файлы. Команда COPY копирует файлы, но не может копировать каталоги. Для подобных целей была придумана команда XCOPY , которая выполняет те же функции, что и команда COPY, и имеет ряд дополнительных функций.
Команда имеет синтаксис: XCOPY источник [целевой_объект] ] ] [+файл3]...]. Как видите здесь присутствует множество различных параметров и ключей. Попробуем разобрать их.
Команда XCOPY может определять режим копирования для файлов с установленным архивным атрибутом. Посмотреть, установлен или нет архивный атрибут можно в свойствах файла. Если команда XCOPY используется с ключом /A , то копироваться будут файлы с установленным архивным атрибутом. Для примера, создадим на диске «С» папку «papka2» и поместим в нее несколько текстовых файлов. У одного из этих файлов снимем архивный атрибут через свойства файла. Тогда команда xcopy papka2 d:\ /a скопирует только те файлы, у которых архивный атрибут установлен. В моем примере я поместил в папку «papka2» 3 текстовых файла: «file1.txt», «file2.txt», «file3.txt». У файла «file1.txt» я снял архивный атрибут. В результате, этот файл не скопировался на диск «D».
Если у команды XCOPY установлен ключ /M , то копироваться будут файлы с установленным архивным атрибутом, при этом, у исходных файлов архивный атрибут будет сброшен. Например, команда xcopy papka2 d:\ /m скопирует из папки «papka2» все файлы с установленным архивным атрибутом и поместит их на диск «D». Причем у исходных файлов будет сброшен архивный атрибут.
Ключ /D:MM-DD-YY позволяет копировать файлы с указанной или более поздней датой. Например, пусть в папке «papka» находится несколько файлов, причем один из этих файлов имеет последнюю дату изменения 24 апреля 2012, а остальные файлы 22 апреля 2012. Тогда команда xcopy papka d:\ /D:04-23-2012 скопирует только тот файл, который имеет дату изменения 23 апреля 2012 либо более позднюю дату. Обратите внимание на формат записи даты: сначала указывается месяц, потом число, потом год.
Если ключ /D не имеет параметр «дата», то копироваться будут файлы, которые были изменены со времени последнего копирования, либо новые файлы, созданные после последнего копирования. Например, пусть в папке «papka» находится несколько файлов. Скопируем их на диск «D»
Теперь откроем один из исходных файлов (в каталоге «papka» на диске «C») и изменим его (напишем какой-нибудь текст и сохраним). Тогда команда xcopy papka d:\ /d скопирует только этот измененный файл. В моем случае я сделал изменения в файле «file.txt». В результате, только этот файл скопировался, остальные 4 файла не копировались.
Ключ /S команды XCOPY позволяет копировать все непустые подкаталоги из каталога-источника. Для примера, создадим на диске «C» каталог «MyFolder1», в этом каталоге создадим еще 2 каталога: «MyFolder2» и «MyFolder3», в каталоге «MyFolder2» создадим текстовый файл «file1.txt». Все это можно сделать средствами командной строки, зная те команды, которые мы уже изучили. Каталоги создаем с помощью команды MD (MKDIR), а текстовый файл создаем с помощью команды COPY с параметром CON.
Теперь скопируем непустые каталоги из каталога «MyFolder1» на диск «D»: xcopy myfolder1 d:\ /s
В результате, на диск «D» будет скопирована одна папка «MyFolder2» из папки «MyFolder1», а папка «MyFolder3» не будет скопирована, т.к. она пустая.
Ключ /E команды XCOPY применяется в случаях, когда необходимо скопировать все подкаталоги из текущего каталога (в том числе и пустые подкаталоги). Для примера, запишем предыдущую команду, заменив ключ /S на ключ /E
В результате, на диск «D» будут скопированы обе папки «MyFolder2» и «MyFolder3». Обратите внимание, что приведенные выше команды копируют только подкаталоги. Сам текущий каталог («MyFolder1») не копируется.
Ключ /P команды XCOPY выводит запрос с подтверждением при создании нового файла при копировании. Например, создадим на диске «С» файл «f3.txt» и скопируем его на диск «D»: xcopy f3.txt d:\ /p
Ключ /W команды XCOPY перед копированием выводит на экран сообщение «Нажмите любую клавишу, чтобы начать копирование файлов». Перепишем предыдущую команду, заменив ключ /P на ключ /W: xcopy f3.txt d:\ /w
Копирует файлы и каталоги, включая подкаталоги.
xcopy источник [результат ] [/w ] [ /p ] [/c ] [/v ] [/q ] [/f ] [ /l ] [/g ] [/d [: мм-дд-гггг ]] [ /u ] [/i ] [/s [/e ]] [/t ] [ /k ] [/r ] [/h ] [{/a |/m }] [ /n ] [/o ] [/x ] [/exclude: файл1 [ + [файл2 ]][+ [файл3 ]] [{/y |/-y }] [ /z ]
Нажмите любую клавишу, чтобы начать копирование файлов
/p Запрашивает подтверждение при создании каждого файла-результата. /c Игнорирует ошибки. /v Проверяет каждый скопированный файл на соответствие его оригиналу. /q Отменяет вывод на экран сообщений команды xcopy . /f Выводит имена исходных файлов и файлов-результатов в процессе копирования. /l Отображает список копируемых файлов. /g Создает незашифрованные файлы-результаты. /d [: мм-дд-гггг ] Копирует только файлы, измененные не ранее заданной даты. Если не включить значение мм-дд-гггг , команда xcopy копирует все файлы-источники , которые новее существующих файлов-результатов . Эта возможность позволяет обновлять только измененные файлы. /u Копирует (обновляет) только те файлы-источники , которые уже существуют в каталоге результата . /i Если источником является каталог или источник содержит подстановочные знаки и результат не существует, команда xcopy считает, что результат это имя каталога, и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy запрашивает подтверждение, является ли параметр результат каталогом или файлом. /s Копирует каталоги и подкаталоги, если они не пусты. Если параметр /s не задан, команда xcopy будет работать только с одним каталогом. /e Копирует все подкаталоги, включая пустые. Параметр /e используется с параметрами /s и /t . /t Копирует только структуру подкаталога (т. е. дерево), а не файлы. Для копирования пустых каталогов следует задать ключ /e . /k Копирует файлы с атрибутом «только для чтения» с сохранением этого атрибута для скопированных файлов, оригиналы которых имеют этот атрибут. По умолчанию команда xcopy удаляет атрибут «только для чтения». /r Копирует файлы с атрибутом «только для чтения». /h Копирует системные и скрытые файлы. По умолчанию команда xcopy не копирует системные и скрытые файлы. /a Копирует только те файлы, которые имеют установленный атрибут «архивный». При использовании параметра /a атрибут "архивный" у исходных файлов не меняется. Сведения об установке атрибутов с помощью команды attrib . /m Копирует только те файлы, которые имеют установленный атрибут «архивный». В отличие от параметра /a , параметр /m очищает атрибут «архивный» у скопированных файлов. Сведения об установке атрибутов с помощью команды attrib . /n Копирует с использованием коротких имен файловой системы NTFS. Параметр /n требуется при копировании из файловой системы NTFS в файловую систему FAT или когда на диске-результате требуется использование соглашения об именах файлов как в файловой системе FAT (8.3). Файлы могут записываться в файловую систему FAT или NTFS. /o Копирует сведения о принадлежности файлов и избирательной таблице управления доступом (DACL). /x Копирует сведения о параметрах аудита файла и системной таблице управления доступом (SACL) (подразумевается наличие /p ). /exclude: файл1 [+ [файл2 ]][+ [файл3 ]] Определяет список файлов, содержащих строки. /y Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. /-y Выдает запрос на подтверждение перезаписи существующего конечного файла. /z Копирует по сети в режиме перезапуска. /? Отображает справку в командной строке.
Начиная с Windows XP эта команда не используется. Она предназначена для обеспечения совместимости с файлами MS-DOS
Построчный вывод всех строк в каждом файле. При соответствии выведенной строки части пути копируемого файла, он исключается из процесса копирования. Например, если указана строка «\Obj\», исключается все файлы, расположенные в каталоге «Obj». Например, если указана строка «.obj», исключается все файлы с расширением.obj.
Если во время фазы копирования теряется сетевое подключение (например, если сервер переходит автономный режим, разрывая подключение), копирование возобновляется после восстановления подключения. Использование параметра /z команды вызывает также отображение доли (в процентах) завершенной операции копирования для каждого файла.
Можно применять параметр /y в переменной среде COPYCMD. Эта настройка может быть переопределена использованием параметра /-y в командной строке. По умолчанию если команда copy выполняется не в пакетной программе, при замене требуется подтверждение.
При копировании файлов на том, не поддерживающий шифрованную файловую систему (EFS), возникнет ошибка. Следует предварительно расшифровать файлы или копировать их на том, поддерживающий EFS.
Чтобы объединить файлы, укажите один файл-результат, но несколько файлов-источников (с помощью подстановочных знаков или формата файл1+файл2+файл3).
Если параметр результат не задан, xcopy будет копировать файлы в текущий каталог.
Если параметр результат не содержит существующий каталок или не заканчивается обратной чертой(\), выводится следующее сообщение:
Что означает destination:
имя файла или каталога
(F = файл, D = каталог)?
Нажмите F, если файл или файлы должны копироваться в файл. Нажмите D, если файл или файлы должны копироваться в каталог.
Чтобы устранить вывод этого сообщения, используйте параметр /i . В результате чего, команда xcopy предполагает, что результат является каталогом, если источник представляет собой несколько файлов или каталогов.
Команда xcopy создает файлы с установленным атрибутом «архивный», независимо от состояния этого атрибута у исходных файлов. Для получения дополнительных сведений об атрибутах файлов команде attrib .
Команда xcopy должна быть использована вместо diskcopy при копировании файлов и подкаталогов на диск другого формата. Так как команда diskcopy копирует диски по дорожкам, требуется, чтобы исходный диск и диск-результат имели одинаковый формат. Для команды xcopy это требование не нужно. Обычно следует использовать команду xcopy , если только не требуется получить два диска с одинаковыми образами.
Для анализа кодов завершения, выведенных командой xcopy , используйте параметр уровень_ошибки в командной строке if пакетных программ. Чтобы увидеть пример пакетной программы, обрабатывающей коды завершения с помощью . В следующей таблице перечислены коды завершения с кратким описанием.
Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска A на диск B, введите:
Xcopy a: b: /s /e
Чтобы включить в операцию копирования предыдущего примера системные и скрытые файлы следует использовать параметр /h :
xcopy a: b: /s /e /h
Чтобы обновить файлы в каталоге \Reports файлами из каталога \alldata, измененными после 29 декабря 2013 года, введите:
Xcopy \alldata \reports /d:29-12-2013
Чтобы обновить файлы предыдущего примера, уже существующие в каталоге \Reports, независимо от их даты, введите следующую команду:
Xcopy \alldata \reports /u
Чтобы получить список файлов, которые были бы скопированы в предыдущем примере, следует ввести команду:
Xcopy \alldata \reports /d:29-12-20133 /l > xcopy.out
Список файлов, которые были бы скопированы, находится в файле Xcopy.out.
Чтобы скопировать каталог \Customer и все подкаталоги \\Public\Address на сетевой диск H, сохранить у файлов атрибут «только для чтения», введите команду:
Xcopy \customer h:\public\address /s /e /k /p
Чтобы выдать предыдущую команду, убедиться, что команда xcopy создает каталог \Address и устранить вывод сообщение о создании нового каталога, добавьте параметр /i следующим образом:
Xcopy \customer h:\public\address /s /e /k /p /i
Для запуска программы xcopy и анализа кодов завершения можно создать пакетный файл и использовать оператор для обработки кодов завершения в случае возникновения ошибок. Например, следующая пакетная программа использует замещаемые параметры для задания источникаxcopy и результата:
@echo off rem COPYIT.BAT копирует все файлы во всех подкаталогах rem исходного диска или каталога (%1) на другой диск rem или в другой каталог (%2) xcopy %1 %2 /s /e if errorlevel 4 goto lowmemory if errorlevel 2 goto abort if errorlevel 0 goto exit:lowmemory echo Недостаточно памяти для копирования файлов, echo задан недопустимый диск или ошибка в синтаксисе. goto exit:abort echo Нажата комбинация CTRL+C для остановки копирования. goto exit:exit
Эта пакетная программа может быть использована для копирования всех файлов каталога C:\Prgmcode и его подкаталогов на диск B следующим образом:
copyit c:\prgmcode b:
Где copyit - имя командного файла, текст которого приведен выше.
Командный интерпретатор подставляет C:\Prgmcode вместо параметра %1
и B вместо
параметра %2
, затем использует команду xcopy
с параметрами /e
и
/s
.
Если при выполнении xcopy
произошла ошибка, пакетная программа считывает
код завершения и переходит на метку, указанную в соответствующей инструкции
IF ERRORLEVEL
. В результате на экран выводится сообщение о
характере ошибки и осуществляется выход из пакетной программы.
Следует отметить, что XCOPY предназначена для работы с файлами и каталогами, но не с устройствами (например, c принтером).
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).
XCOPY копирует файлы и каталоги, включая подкаталоги в командной строке Windows. Это мощная команда для копирования файлов и папок, имеет больше параметров чем простая команда COPY .
xcopy источник [результат] ] ] [{/a|/m}] ][+[файл3]] [{/y|/-y}]
Чтобы копировать все файлы и подкаталоги (включая пустые подкаталоги) с диска D на диск E, введите.