статьи

Как написать свой bat-файл для создания резервной копии

Думаю, что многие, так или иначе, периодически создают (так называемые backup-ы) тех или иных файлов и папок. Вроде все привычно и делать ничего особо сложного не надо: вставить флешку, открыть "Мой компьютер", найти что надо скопировать, выделить, тыкнуть мышкой, выбрать "скопировать", перебраться в нужный каталог, тыкнуть "вставить" и тд.

backuo

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

Теория и прочая необходимая информация

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

Пакетный файл (англ. batch file) — текстовый файл в MS-DOS, OS/2 или Windows, содержащий последовательность команд, предназначенных для исполнения командным интерпретатором. После запуска пакетного файла, программа — интерпретатор (как правило COMMAND.COM или CMD.EXE) читает его строка за строкой и последовательно исполняет команды. Пакетный файл — аналог shell script в Unix-подобных операционных системах.

Пакетные файлы полезны для автоматического запуска приложений. Основная область применения — автоматизация наиболее рутинных операций, что регулярно приходится совершать пользователю компьютера. Примерами таких операций могут служить — обработка текстовых файлов; копирование, перемещение, переименование, удаление файлов; работа с папками; архивация; создание резервных копий баз данных и т. п. Пакетные файлы поддерживают операторы if и goto (а в системах семейства Windows NT и расширенный оператор for), что позволяет обрабатывать результаты выполнения предыдущих команд или приложений и в зависимости от этого выполнять дальше тот или иной блок команд (как правило, в случае удачного завершения приложение возвращает 0 в переменной errorlevel; в случае неудачного — 1 или большее значение).

Пакетные файлы в DOS имеют расширение .bat; для других операционных систем они могут иметь другие расширения — например, .CMD в Windows NT и OS/2, или .BTM в 4DOS или подобных оболочках.

С теорией разобрались, приступим к, собственно, практике, а именно созданию bat-ника.

к содержанию ↑

Как создать файл и использовать его

Давайте подготовим небольшое тестовое поле, чтобы было на базе чего экспериментировать. Откройте мой компьютер и создайте на диске C:\ папочку test. Зайдите в неё и создайте в ней папку testcopy. Накидайте туда файлов (штук 5-10) - фотки, документы и тд и тп (любых короче). Поле для экспериментов готово. Далее нам надо создать, собственно, сам bat-файл по нажатию на который у нас будет происходить копирование папки C:\test\testcopy в, скажем, папку C:\test\backup. Создавать вторую папку (которая backup) не надо - она будет появляться автоматически.

Создать bat-файлик очень просто. Жмем правой кнопкой мышки там где хотим его создать (расположение не важно - можно прямо на рабочем столе) и выбираем "Создать" - "Текстовый документ". Задаем созданному файлу название и открываем его блокнотом или любым другим текстовым редактором. Т.е. на данный момент мы имеем открытый текстовый файлик, который называется, допустим, копирование.txt. Далее, собственно, нам в этот файлик нужно ввести команду, которая будет воспроизводиться по средством консоли (cmd) при запуске этого файла. В данном случае мы воспользуемся командой xcopy ибо именно она позволяет копировать файлы, каталоги и подкаталоги. Учитывая все пути у нас получится следующая команда:

xcopy C:\test\testcopy C:\test\backup /f /i /y /s

Разъясняю что тут к чему:

  • xcopy - это сама команда.
  • C:\test\testcopy - это источник, т.е. папка откуда копируются файлы и каталоги.
  • C:\test\backup - это результат, т.е. место, куда будут скопированы файлы и каталоги.
  • /f /i /y /s - дополнительные параметры синтаксиса для команды xcopy (см.синтаксис ниже по тексту).

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

Какие есть (т.е. те, что я указал в данном примере):

  • /f - выводит имена исходных файлов и файлов-результатов в процессе копирования
  • /i - создает новый каталог в случае, если тот отсутствует в конечном пути
  • /y - перезаписывает файл в случае, если он уже есть
  • /s - копирует каталоги и подкаталоги, если они не пусты. Если параметр /s не задан, команда xcopy будет работать только с одним каталогом.

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

Далее нам надо сменить формат файла с txt на bat. Делается это следующим образом.
Сначала открываем "Мой компьютер", там переходим "Сервис" - "Свойства папки" - "Вид" и снимаем галочку "Скрывать расширение для зарегистрированных типов файлов". Жмем "Применить" и "Ок". Теперь мы можем менять расширение известных системе файлов, а посему направляемся к нашему файлику, жмем правой кнопкой мышки, выбираем "Переименовать" и методом печатания на клавиатуре меняем расширение с txt на bat (на вопрос системы стоит ли это делать отвечаем утвердительно). В результате мы имеем следующую картину (в вашем случае файлик называется иначе, но имеет тот же формат):

Собственно, все, что нам остается - это запустить этот файл простым кликом по нему мышки. Если Вы все сделали правильно, то перед Вами промелькнет консоль и по известному пути появится новая папочка с заданным заранее названием и файлами внутри скопированными из известной Вам папки, т.е картина получится примерно следующая:

Ну или несколько другая, в зависимости от того какие пути и названия папок Вы прописывали в команде.
Отредактировать файлик можно сменив ему расширение обратно на .txt и открыв любым текстовым редактором.

к содержанию ↑

Послесловие

Как я уже сказал и Вы сами наверное осознали - использование подобного bat'ника зачастую экономит кучу времени, т.е. один раз написал и периодически запускаешь одним кликом и вместо многоминутных тычков мышкой и ползания по всем папкам получаешь автоматизированный процесс копирования. При желании можно поставить запуск этого bat-ника в определенные дни через планировщик Windows (или другие программы позволяющие это делать) и вообще забыть о проблеме долгих ручных backup'ов.

Если есть какие-то вопросы или проблемы - спрашивайте. Как всегда помогу чем смогу ;)

PS: Если мне не изменяет память, то это кусочек темы из умных админских книжек, а именно из раздела "Автоматизация администрирования".. так что можете собой гордится :)

Оценить

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(6 голосов, в среднем: 5 из 5)
  1. Александр

    Статья хорошая, но я бы посоветовал когда создаешь bat-файл в блокноте то сразу присваивать ему расширешие bat, а не потом в винде :)
    ну и когда его надо изменить - тоже не надо менять расширение, нажать правую кнопку мыши и будет пункт "Изменить" - откроется блокнот и там менять все :)

    • Sonik

      У меня просто блокнот в системе отсутствует совсем и посему писал почти по памяти :) Да и знания лишними не бывают - будут знать как менять расширение зарегистрированным типам файлов ;)

  2. НайТ

    Спасибо)) хотелось бы еще узнать побольше команд для командной строки :)

    • Sonik

      Всё будет ;)

    • fun

      Пуск - Выполнить - cmd - help
      Информация о команде: /?
      Например, для xcopy /? есть ещё полезный атрибут /d, копирующий только в том случае, если файл новее.

  3. Fondornino

    Благодарю за материал.

    Андрей, а если не трудно, поясни пожалуйста, в чём разница между сценариями Windows и bat-файлами. Как я понимаю, разницы нет. Или я ошибаюсь?

    Спасибо :)

  4. НайТ

    Что-то у меня команда в бат-нике не работает, хотя если прописать её в командной строке, то все гуд...
    move D:\Downloads\Видео\SoHo\* D:\Video
    почему так?

  5. Лантиец

    НайТ, имя файлов и папок должны на английском быть

  6. Zealot

    [quote comment="5844"]Что-то у меня команда в бат-нике не работает, хотя если прописать её в командной строке, то все гуд...
    move D:\Downloads\Видео\SoHo\* D:\Video
    почему так?[/quote]
    Потому что нужно сохранять батник в кодировке 866 (ОЕМ). После сохранения батника в этой кодировке будут корректно отображатся папки и комментарии на русском языке. Я кодировку меняю в AkelPad'e.

  7. Максим

    У меня вопрос. Как скопировать только несколько файлов из папки, а не все?

    • Sonikelf

      Отвечал в Вашей теме на форуме.

  8. akvadroid

    Sonikelf спасибо вам огромное ! после некоторых мучений ,освоил и эту задачу !

    копировал целиком флешку на HDD
    xcopy p:\ e:\test\backup /f /i /y /s
    после выполнения задачи зашёл в папку с файлами e:\test но она оказалась "пуста"

    ввел dir e:\test\backup оказалось все на месте ,прописал путь к папке в ручную Компьютер\Е:\test\backup и все нашлось !
    имхо : команда на копирование не особо и сложная можно и запомнить, а что касаеться конечной папки то что она скрытая еще даже лучше !

  9. dilen

    Здравствуйте! Статья замечательная.Но у меня возник такой вопрос-а можно ли сделать такой же бекап на другой сетевой ресурс с помощью батника?То есть указать, допустим, его IP?И если можно, то как?

  10. Ктото

    Ну никак не получается! У меня папка пользователя русскими буквами, вместо Users - Пользователи...Что вот мне делать??? Или может в другом проблема. Пути вроде правильно прописаны.

    • Pulsar

      Если редактируете командный файл в блокноте, то введите перед командами строку перехода на кодовую страницу 1251:

      >NUL CHCP 1251

      и тогда русские названия папок будут восприниматься как надо.

  11. Kate

    Подскажите,пожалуйста была вот такая команда xcopy С:\Documents and Settings\test С:\Documents and Settings\backup /f /i /y /s, так вот окошко консольное мелькала ,но ничо не создавалась,попробовала на других дисках все ок,все создается, объясните,плиз,почему первая команда не работала?

    • Ольга

      Что бы из одной папки копировалось в другую, названия папок должны быть без пробелов, т.е не май 2013, а май2013. Я так копирую с одного компа в сети на другой.

  12. Фёдор

    Спасибо неоднократно. Как Вам удалось написать о сложном, виртуальном просто и доходчиво?!!
    Желаю удачи в этом важном для пользователей деле!!

  13. гость

    спасибо!
    очень доходчиво написано

  14. Даник

    А как прописать чтобы бэкапы делались на сервер? тоесть надо бы прописать сетевой путь?

  15. Александра

    Здравствуйте, помогите решить задачу!!!
    Backup.bat
    backup mp3 откуда куда
    ###
    backup (input)
    mp3 C:\Temp D:\backup
    doc C:\Docs D:\Backup\Dock
    Не понимаю, Чего надо сделать.
    Еще надо сделать замену старых файлов на более свежую

Извините, комментарии к данной записи сейчас закрыты.