Что такое bat-файл, как создавать файлы пакетной обработки команд

Cobian backup как бесплатный инструмент для создания резервных копий

Настраиваем расписание в Mac OS и Linux

За запуск команд по расписанию в Mac OS и Linux отвечает команда crontab. У неё много параметров и возможностей, но сейчас нас интересует только одно — как с её помощью запускать нашу команду для бэкапа раз в 10 минут.

Для этого делаем так.

  1. В терминале пишем команду и нажимаем Enter. 
  2. Появляется окно редактора, где нужно нажать сначала s, а потом вставить такую строчку:
  1. Нажимаем сначала Esc, а потом по очереди :wq (двоеточие, потом w, потом q) — это сохранит нашу команду и закроет редактор.
  2. Проверяем, что всё записалось командой — мы должны увидеть свою команду.

За запуск каждые 10 минут отвечает начало команды — . Остальные звёздочки отвечают за часы, дни, недели и месяцы, а косая черта — за постоянное повторение каждые сколько-то минут. 

Теперь 6 раз в час наша команда будет запускаться и следить за актуальностью резервной копии. Если нужно несколько команд, то просто добавьте новые строчки и сохраните всё таким же образом.

Сохраняем и выходим из редактораУбеждаемся, что наша команда на месте и расписание действуетЧтобы всё работало без сбоев, в Системных настройках нужно выбрать раздел «Защита и безопасность» → «Доступ к диску». В нём нажать на плюсик, потом ⇧+⌘+G, вставить /usr/sbin/cron и нажать Enter. В списке появится cron, а это значит, что он может выполнять любые задачи с файлами в любой момент

Создание .bat файла с помощью блокнота

Первый и самый простой способ создать bat файл — использовать стандартную программу «Блокнот», присутствующую во всех актуальных версиях Windows.

Шаги по созданию будут следующими

  1. Запустите Блокнот (находится в Программы — Стандартные, в быстрее запустить через поиск в панели задач, если блокнота нет в меню «Пуск», запустить его можно из C:Windowsnotepad.exe).
  2. Введите в блокнот код вашего bat файла (например, скопируйте откуда-то, либо напишите свой, о некоторых командах — далее в инструкции). 
  3. В меню блокнота выберите «Файл» — «Сохранить как», выберите место сохранение файла, укажите имя файла с расширением .bat и, обязательно, в поле «Тип файла» установите «Все файлы». 
  4. Нажмите кнопку «Сохранить».

Примечание: если файл не сохраняется в указанное расположение, например, на диск C, с сообщение «У вас нет разрешения на сохранение файлов в этом месте», сохраните его в папку «Документы» или на рабочий стол, а затем скопируйте в нужное расположение (причина проблемы в том, что в для записи в некоторые папки нужны права администратора, а поскольку блокнот не был запущен от имени администратора, он не может сохранить файл в указанную папку).

Добавить в заметки чтобы посмотреть позже?

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

Примечание: в дальнейшем, если вы захотите отредактировать созданный файл, просто нажмите по нему правой кнопкой мыши и выберите «Изменить».

Существуют и другие способы сделать bat файл, но все они сводятся к написанию команд по одной команде в строке в текстовый файл в любом текстовом редакторе (без форматирования), который затем сохраняется с расширением .bat (например, в Windows XP и 32-битной Windows 7 вы даже можете создать файл .bat в командной строке с помощью текстового редактора edit).

Если у вас включено отображение расширений файлов (изменяется в панель управления — параметры проводника — вид — скрывать расширения зарегистрированных типов файлов), то вы можете просто создать файл .txt, затем переименовать файл, установив расширение .bat.

Пробелы и кавычки в bat-файлах

Кавычки на самом деле работают, но не с теми способами, которые обычно советуют. Советуют обычно следующее:

Так команда не сработает, поскольку если посмотреть справку по ней (start /?
), то в справке вы увидите следующее:

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

Также сработает и вариант с заключением в кавычки всех имён с пробелами по отдельности:

Однако, в ряде случаев не работает ничего из вышеописанного. В таких случаях я могу посоветовать использовать команду cd
. Переходим на системный раздел, затем с помощью cd
в папку Program Files
и запускаем программу (start
):

Я думаю, что такой способ будет работать везде. Теперь еще пара важных моментов. Допустим вы создали батник, запускающий три программы и вам нужно на время исключить запуск одной из трех. Это можно сделать удалением строки или ее комментированием. Первый способ — вандальный, а второй смотрите ниже.

В данном случае отключен запуск установленной в системе программы Defraggler.exe. Комментируют строки, указывая команду rem
в начале строки. Все BAT файлы выполняются в окне консоли. Чтобы оно исчезало по окончании выполнения команд, не забывайте в конце писать команду на выход exit.

Длинныe имена в bat-файлах

Теперь поговорим о путях и пробелах. Первый способ избежать этой проблемы — использование короткого имени.

В примере два имени с пробелами. Заменим их короткими. Правила создания коротких имен следующие: в коротком имени используются первые шесть символов имени без учета пробелов, после имени указывают порядковый номер папки с помощью символа ~
. Так как папки Program Files
и Sound Club
у меня в единственном числе, получится следующее:

Program Files — Progra~1

Sound Club — SoundC~1

start
C:\Progra~1
\SoundC~1
\scw.exe

Если рядом будут присутствовать две папки, например Sound Club
и Sound Clown
, то следуя правилам, в примере выше надо будет указать SoundC~2
, так как в этом случае Sound Club
окажется вторым именем (имена считаются в алфавитном порядке).

Но этот способ неудобен тем, что приходится указывать порядковые номера. Ситуация с Program files
более менее нормальная. Мало у кого встретится две подобные папки на системном диске. Но если вы решили установить несколько продуктов Mozilla
на свой компьютер. У вас получится несколько папок, например:

Mozilla Firefox
Mozilla Thunderbird
Mozilla Sunbird

Короткими именами для них будут

Mozill~1
Mozill~2
Mozill~3

А теперь представьте, что вы написали BAT файл с упоминанием этих программ. Если удалить Firefox, оставшиеся записи перестанут работать, а если удалить Thunderbird, перестанет работать запись для Sunbird. Короче, способ с короткими именами — не наш способ.

Возможности bat

Простые команда batch-файлов

echo off запрещение вывода на экран исполняемых команд (on — вкл.)
deltree /y %файл% удалить файл (/y означает «удалить без вопросов»). Кстати, в NT работает только del
(флаг /y не нужен).
copy %путь\файл% %куда\файл% cкопировать файл
mkdir %название_диры% создать директорию
echo %текст% вывести текст на экран
echo %текст% > %путь\файл% создать файл и вписать в него текст
echo %текст% >> %путь\файл% добавить текст в уже существующий файл
if exist %путь\файл% %команда% если существует файл, выполнить команду
attrib %атрибут% %путь\файл% поставить\убрать атрибуты файлу (+-h скрытый, +-s системный, +-r только чтение)
start %путь\файл% запустить файл
cls очистить экран
pause выводит сообщение «Нажмите любую кнопку…
»
label %новая_метка% поставить новую метку системного диска (диск С)
format %диск%: /q быстрое форматирование диска:) Несколько секунд
ren %путь\файл% %новое_название_файла% переименовать файл
goto %метка% перескочить с одного места кода на метку

Непростые фишки bat-файлов и хитрости

  • Подобие таймера (на n секунд задерживает выполнение последующих команд)
    choice /N /T:y,%сек% > nul
  • Запрещение вывода на экран самой команды и результата её действия (полезно при команде «copy»). Пример: copy c:\some.exe %windir%\some.exe > nul
    %команда% > nul
  • Добавить ключи в реестр из файла без вопросов
    regedit /s %путь\файл.reg%
  • Запустить файл в свёрнутом окне
    start /m /w %путь\файл%
  • Слышал про файл Autoexec.bat? Знаешь, что он грузится вместе с компом? Наверное, да. Так вот, он имеет расширение BAT. На что я намекаю? На то, что ты можешь в него прописать строчку хитросделанного кода. Это я к тому, что любой скрипт, вставленный в этот файл, будет выполнен при загрузке компа. Также можешь создать в каталоге с виндой файл winstart.bat. Он также запуститься виндоус.
  • Это относиться как раз к фишке с Autoexec. К примеру, если ты положишь в каталог Windows\command файл к примеру «load.bat» (наверное, с плохим содержанием), а из autoexec»a подгрузить свой батничек. И это ещё отстой.. Ты сможешь загружать эти файлы такой строчкой: «load keybrd32.sys» или такой: «load VideoAdapter32.drv — By windows setup —«. Вряд ли такие строчки рискнёт удалять какая-нибудь лама, и твой файл без проблем загрузится.
  • После выполнения этого скрипта в переменной %drv% будет прописан диск с Виндой и с Programm Files
    if exist c:\Progra~1 set drv=c:
    if exist d:\Progra~1 set drv=d:
    if exist d:\Progra~1 set drv=e:
  • В переменной %windir% хранится каталог с виндусом в таком виде: диск:\название_каталога. Пример:
    copy c:\some.exe %windir%\some.exe
  • Batch скрипты не любят длинные, либо состоящие из двух слов, названия. Длинные урезаются до 6-ти букв (после них должно стоять «~1», к примеру «Program Files -> Progra~1»). Пробелы он просто убирает (The Bat -> TheBat~1).
    Это я к тому, что в бачах обращайся к файлам по их досовским названиям. Пример:
    copy c:\some.exe c:\Progra~1\some.exe (копируется файл в папку Program Files)
  • Этот скрипт выводит на экран Windows-окошко (посредством JS) с твоим сообщением и кнопкой ОК
    echo var WSHShell = WScript.CreateObject(«WScript.Shell»); > %temp%\mes.js
    echo WSHShell.Popup(«твой_текст»); >> %temp%\mes.js
    start %temp%\mes.js
    deltree /y %temp%\mes.js

Добавляем в файл команду, например, для копирования

Далее, собственно, нам в этот файлик нужно ввести команду, которая будет воспроизводиться по средством консоли (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
    будет работать только с одним каталогом.

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

Часть третья. Резервное копирование при помощи батников

Резервное копирование данных — полезное и оттого весьма распространенное явление. Существует большое количество программ, отличающихся друг от друга функционалом, условиями распространения, уровнем (глубиной вопроса) и т.д. Бесспорно, пользоваться хорошей и красивой программой удобно и приятно, но если ваши задачи не слишком сложны, то элементарное создание бэкапов можно организовать и без использования стороннего софта, исключительно средствами ОСи.

Для копирования каких-либо данных используется команда copy (копирование файла/файлов) или xcopy (копирование каталогов). Т.е., допустим, нам необходимо делать бэкап содержимого папки, в которой находятся ваши данные к дипломной работе (материалы, приложения, черновик самой работы и т.д.). В этом случае текст будет следующим

@echo off chcp 1251 xcopy «D:\diplom\*.*» «E:\backup\diplom\*.*»

Где D:\diplom\ — папка расположения всех материалов к диплому, а E:\backup\diplom\ — конечная директория резервной копии. Создаём батник, кидаем его в автозагрузку (пуск — все программы — автозагрузка), и при каждом включении компьютера будет создаваться резервная копия (рк).Чуть усложним. Сделаем, чтобы при включении ПК старые данные сохранялись в папочке diplom_old, а новые в папочке diplom. Тогда батник будет иметь вид

@echo off chcp 1251 del «E:\backup\diplom_old\» /s /q rmdir «E:\backup\diplom_old\» /s /q rename «E:\backup\diplom\» «diplom_old» xcopy «D:\diplom\*.*» «E:\backup\diplom\*.*»

del удаляет ранее созданную вторую рк. rmdir переименовывает первую рк во вторую. xcopy создаёт новую рк. Атрибут /s применяет команду ко всем подкаталогам, атрибут /q отключает запрос на подтверждение действий.Если в двух копиях смысла нет, можно сделать так, чтобы заменялись только те файлы, которые были изменены, те же, которые не изменились, либо вообще были удалены из исходной папки, затронуты не будут. Для этого пишем следующее

@echo off chcp 1251 xcopy «D:\diplom\*.*» «E:\backup\diplom\*.*» /E /F /H /R /K /Y /D

Создание бэкапа в архиве

Ну и последнее, что здесь стОит рассмотреть, наверное, на данном этапе — это бэкапы в архиве Рассмотрим изменённую предыдущую ситуацию. Допустим, нам надо, чтобы при каждом включении ПК создавалась копия папки, запакованная в архив. Нам необходимо в автозагрузку положить батник со следующим содержимым

@echo off chcp 1251 c:\PROGRA~1\WinRAR\WinRAR.exe a -o+ -agDD-MMM-YY–HH-MM-SS «E:\backup\» «D:\diplom\»

Архив папки D:\diplom будет создаваться в E:\backup, именем будет дата и время создания архива, т.е., например 16-Aug-12–14-06-53

к содержанию

Для чего нужны

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

Экспорт переменных реестра из пакетного файла

В некоторых случаях поставлена задача, противоположная рассмотренной в предыдущем абзаце. Чтобы сохранить в пакетном файле некоторую часть реестра с полным перечнем параметров, необходимо использовать следующий подход:

regedit.exe -ea C:\environment.reg «HKEY_CURRENT_USER\Environment»

Происходит сохранение ветки HKEY_CURRENT_USER\Environment в документ, расположенный по адресу C:\environment.reg. При запросе на восстановление значений HKEY_CURRENT_USER\Environment, предполагается необходимым только выполнить запуск environment.reg. Примером использования такой команды следует назвать осуществление регулярного бэкапа настроек ПО или всей системы. Подобная информация находится в реестре и может быть выгружена оттуда. Полный адрес может включать в себя проблемы. Чтобы они не вызвали ошибку, надо позаботиться о заключении подобного пути в кавычки.

Способы обхода процедуры проверки даты из файла BAT

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

Если Вы не хотите, чтобы программа использовала временную проверку, можно изменить свои настройки даты и времени. Этот вариант нельзя назвать приемлемым по многим причинам. Более эффективным подходом требуется назвать использование пакетного файла со специально прописанной информацией. Предполагается запуск приложения и последующий возврат даты к тому значению, что присутствовало ранее.

set tempdate=%date:~-10%

date 01-01-04

start notepad.exe

date %tempdate%

Что именно делают прописанные строки? Прежде всего, производится сохранение текущей даты в системе. Для этого применяется особая переменная. Во второй строке происходит установка системной даты на новое значение. В данном случае, это 1 января 2004 года. Сразу после этого предполагается проведение вызова программы, отвечающей за проверку системной даты. Мы использовали блокнот, но в Вашем случае требуется предусмотреть подобный момент. Пока Блокнот является открытым, пакетный документ ожидает, а сама дата не предусматривает изменение обратно. После закрытия Блокнота происходит возврат системной даты из переменной.

Важно уделить внимание определенному моменту. Когда в пути до конкретного документа используются символы из кириллицы, рекомендуется применять текстовый редактор с поддержкой кодировки 866 (ОЕМ, русская) или аналогичного варианта. Когда это не предусматривается, происходит выдача ошибки и работа пакетного файла не осуществляется

Когда это не предусматривается, происходит выдача ошибки и работа пакетного файла не осуществляется

Когда это не предусматривается, происходит выдача ошибки и работа пакетного файла не осуществляется.

Большинство программ упрощают систему проверки – она выполняется исключительно в процессе запуска. Это позволяет модифицировать пакетный документ в соответствии с подобными запросами.

set tempdate=%date:~-10%

date 01-01-04

start notepad.exe

date %tempdate%

Процесс работы довольно прост. В первую очередь выполняется изменение системной даты и последующий запуск программы. Пакетный документ не станет ждать, пока она завершит своё функционирование и осуществит возврат даты на прежнее значение.

Процесс выключения Linux

Естественно, команда shutdown linux или любая другая не самостоятельно завершает работу системы и выключает компьютер. Она всего лишь передает запрос на выключение системе инициализации, а затем ядру. А уже они выполняют ряд сложных операций по подготовке и выключению компьютера. Если кратко, то вот они:

  • Завершение процессов пользователя
  • Сигнал SIGTERM всем процессам
  • Сигнал SIGKILL всем процессам
  • Монтирование файловых систем в режиме только для чтения
  • Подготовка внешних устройств к отключению
  • Блокировка пространства пользователя, чтобы гарантировать, что ни один код пользователя больше не будет запущен
  • Завершение работы и отключение питания большинства периферических устройств
  • Отключение питания компьютера

Теперь вы понимаете суть процесса выключения и то почему нельзя просто выдернуть шнур питания с розетки. Если это сделать, компьютер отключится моментально и не выполнит всех необходимых операций, а это может грозить потерей не сохраненных или даже недавно сохраненных данных, повреждением файловой системы и т д. Поэтому желательно выключать компьютер правильно с помощью shutdown или других специальных утилит.

А теперь перейдем к примерам.

Получить список файлов в папке с помощью Bat-файла

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

Никакой текстовой информации, сопровождающей фотографии нет. Необходимо сделать список на основе присланных фотографий и импортировать его в каталог товаров на сайте. Для каждого товара сделано по несколько фото. Они именованы так:

  1. Фото товара с артикулом А1234.jpg
  2. Фото товара с артикулом А1234 (2).jpg
  3. Фото товара с артикулом В1234.jpg
  4. Фото товара с артикулом В1234 (2).jpg

Сначала я получаю список всех файлов, находящихся в папке при помощи следующей команды:

Команда *.jpg позволит учитывать только JPG-файлы при составлении списка. Ключ /B позволит получить список, содержащий только имена файлов, находящихся в папке. Ключ /L выведет все имена в нижнем регистре. Команда >filelist.txt создаст текстовой файл с именем filelist и запишет резутьтат туда.

Следующим шагом нужно избавиться от дублей, чтобы в списке осталось только по одной записи для каждого товара:

Команда findstr будет осуществлять поиск в ранее полученном файле. Ключ /I позволяет искать записи без учёта регистра, а ключ /V записывает строки, в которых отсутствует искомое совпадение. В кавычках указана строка, совпадение с которой нужно фиксировать. И последняя команда > temp.txt запишет в файл temp все результаты, не содержащие в имени «(2)». В результате я получу:

  1. Фото товара с артикулом А1234.jpg
  2. Фото товара с артикулом В1234.jpg

И далее на основе этого текстового списка буду готовить файл для импорта.

Если вам понадобится провести обратную операцию — вывести в файл temp.txt только совпадения, то в списке команд ( findstr /? ) вы не найдёте нужной. Есть только обратный фильтр по точному совпадению — /X .

Для этой задачи можно воспользоваться командой вывода номера строк /N , в которых имеются совпадения (номера выводятся вместе со строкой):

Главное при работе с текстовой информацией (текстовыми файлами) помнить один момент:

Если для текстовых операций вы в качестве исходника используете файл, который создали не через командную строку, он должен быть в кодировке, которая понимается командной строкой. Например, CP1251 (ANSI) .

Иначе рискуете получить на выходе нечто такое:

Создание папки, имя которой устанавливается текущей датой

Папки данного вида популярны в качестве мест сохранения бэкапов. Необходимо рассмотреть основные методы создания.

MD %SYSTEMDRIVE%\%date:~-10%

Применение команды позволит создать новую папку и присвоить её название, соответствующее текущей дате. Недостатком указанного подхода считается невозможность получения результата в определённых ситуациях. Сюда можно отнести неподходящие установки отображения даты на компьютере или специфические региональные настройки. Чтобы подобные факторы не оказали своего влияния, применяется следующий вид:

md %systemdrive%\%date:~0,2%_%date:~3,2%_%date:~6,4%

или

md %systemdrive%\%date:~6,4%_%date:~3,2%_%date:~0,2%

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

@echo off

for /F «tokens=1-4 usebackq delims=. » %%1 in (`date /t`) do set mydate=%%4.%%3.%%2

ren test.txt test%mydate%.txt

Это позволит изменить название документа с test.txt на test(гггг.мм.дд).txt

Внешние команды

  • Exit используется для выхода из консоли DOS или (с опцией /b) только текущего bat-файла или подпрограммы.
  • Ipconfig — это классическая консольная команда, которая выводит информацию о сети. Она включает MAC- и IP-адреса, и маски подсети.
  • Ping пингует IP-адрес, отправляя к нему пакеты данных, чтобы оценить его удаленность и время ожидания (отклика). Также используется для задания паузы. Например, команда ping 127.0.01 -n 6 приостанавливает выполнение кода на 5 с.

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

Послесловие

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Компьютерная помощь
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: