На первый взгляд может показаться, что данные возможности системы абсолютно бесполезны для рядового пользователя, однако это не совсем так. При помощи пакетных файлов можно существенно упростить рутинную работу с ПК, сделать её удобнее, воспользоваться некоторыми скрытыми возможностями.
Новатором и пионером в данной области я, само собой, не являюсь, просто постараюсь изложить здесь базовое представление об этом типе файлов, рассмотреть некоторые примеры и остановиться на парочке деталей и тонкостей, касающихся так называемых .
Для удобства написания и, естественно, восприятия разобью статью по разделам. Но сначала:
- Выше уже упоминалось, что пакетный файлы – это обычные текстовые документы. Так и есть, но для того, чтобы они работали и выполняли свои функции, им нужно придать подобающий вид, т.е. поменять расширение. Вообще в Windows используется как расширение *.bat, так и *.cmd, по сути они отличаются весьма незначительно лишь некоторыми нюансами, поэтому, в целях избежания путаницы, будем говорить о bat-файлах. Т.е. чтобы создать исполняемый пакетный файл, мы открываем стандартный блокнот (либо другой, привычный вам текстовый редактор), вбиваем туда нужные нам команды и сохраняем файл с любым именем и расширением bat;
- По сути, перечень команд, описанных в пакетном файле (батнике) может быть воспроизведён вручную в командной строке (пуск – все программы – стандартные – командная строка), упаковываем их (команды) мы исключительно для удобства, простоты и моментальности (если позволите) воспроизведения;
- Если испытываете что-то серьёзное и не уверенны в своих действиях, лучше испытывайте детище к примеру на виртуальной машине (в крайнем случае – на компьютере соседа);
- Список возможных к использованию команд очень велик, посмотреть его можно, набрав в командной строке help, здесь же будут расшифровываться команды по мере их появления в создаваемых батниках;
Часть вторая. Синтаксис при написании bat-файлов
- Каждая команда вводится с новой строчки;
- Все команды выполняются последовательно за исключением тех случаев, когда внутри самого батника присутствует переход к определённой его части;
- Если команду необходимо ввести с атрибутом, то сначала вводим команду, затем пробел, слэш и, собственно, сам ключ copy /Y Чтобы посмотреть список возможных атрибутов к конкретной команде, нужно в командной строке ввести команду, затем пробел, слэш и знак вопроса dir /?
- Все директории внутри команд, для исключения возможных ошибок, будем вводить в кавычках;
- В командной строке (а значит и в пакетных файлах) при указании директории иногда бывает удобнее пользоваться переменными, нежели прописывать весь путь cd %APPDATA%
Часть третья. Резервное копирование при помощи батников
Резервное копирование данных – полезное и оттого весьма распространенное явление. Существует большое количество программ, отличающихся друг от друга функционалом, условиями распространения, уровнем (глубиной вопроса) и т.д. Бесспорно, пользоваться хорошей и красивой программой удобно и приятно, но если ваши задачи не слишком сложны, то элементарное создание бэкапов можно организовать и без использования стороннего софта, исключительно средствами ОСи.
Автоматическое копирование каталогов в папку backup
Для копирования каких-либо данных используется команда copy (копирование файла/файлов) или xcopy (копирование каталогов). Т.е., допустим, нам необходимо делать бэкап содержимого папки, в которой находятся ваши данные к дипломной работе (материалы, приложения, черновик самой работы и т.д.).
В этом случае текст будет следующим
Где D:diplom – папка расположения всех материалов к диплому, а E:ackupdiplom – конечная директория резервной копии.
Создаём батник, кидаем его в автозагрузку (пуск – все программы – автозагрузка), и при каждом включении компьютера будет создаваться резервная копия (рк).Чуть усложним. Сделаем, чтобы при включении ПК старые данные сохранялись в папочке diplom_old, а новые в папочке diplom. Тогда батник будет иметь вид
del удаляет ранее созданную вторую рк.
rmdir переименовывает первую рк во вторую.
xcopy создаёт новую рк.
Атрибут /s применяет команду ко всем подкаталогам, атрибут /q отключает запрос на подтверждение действий.Если в двух копиях смысла нет, можно сделать так, чтобы заменялись только те файлы, которые были изменены, те же, которые не изменились, либо вообще были удалены из исходной папки, затронуты не будут. Для этого пишем следующее
Создание бэкапа в архиве
Ну и последнее, что здесь стОит рассмотреть, наверное, на данном этапе – это бэкапы в архиве
Рассмотрим изменённую предыдущую ситуацию. Допустим, нам надо, чтобы при каждом включении ПК создавалась копия папки, запакованная в архив.
Нам необходимо в автозагрузку положить батник со следующим содержимым
Архив папки D:diplom будет создаваться в E:ackup, именем будет дата и время создания архива, т.е., например 16-Aug-12–14-06-53
Часть четвертая. Автоматизация процесса создания и удаления файлов/каталогов с использованием bat-файлов
Начнём с самого простого. Создание папки. Папка создаётся командой MD
Чтобы создать папку с именем backup в корне диска D:, нам необходимо собрать следующего вида пакетный файл
Если же, допустим, нужна каждый день новая папочка с датой на месте имени, то батник будет иметь вид
Здесь строчкой set datetemp=%date:~-10% мы создаём переменную datatemp на время работы батника и присваиваем ей 10 символов значения системной даты;
Как создать текстовый файл из батника
С созданием пустых текстовых файлов дело чуть сложнее. Такой команды просто нет, нужно что-то в этот файл писать. Чтобы выйти из ситуации воспользуемся значением nul (это даже не нулевое значение, а его отсутствие)
Также, как и в примере с папкой, можно сделать именем текущую дату
Автоматическая очистка папки из батника
Теперь, что касается удаления. Тоже достаточно часто используемая область работы для батников. Так, например, без помощи спец.программ можно при каждом запуске (опять же, поместив пакетный файл в автозагрузку) очищать temp на вашей машине. Содержимое будет следующим
Часть пятая. Прочие возможности bat-файлов
Возможностей, на самом деле, огромное множество. Здесь для примера рассмотрим некоторые из них.
Одна из самых известных возможностей использования батников – это запись содержимого каталога в файл
После выполнения этого файла, в папке, откуда он запускался, будет создан файлик , содержащий перечень всех файлов и папок в этом каталоге с указанием размера и даты последнего изменения. Можно преобразовать этот файл до вида
/S заставит батник показать содержимое не только каталога, но и всех подкаталогов.
c: поможет отобразить содержимое не того каталога, откуда запускается бат-файл, а нужного нам.
X:ile.txt сохранит конечный файл со списком содержимого в указанное нами место;
Запуск файлов из командной строки
Очень часто полезным оказывается возможность запуска объектов из командной строки (в данном случае уже из бат-файлов). Причем как программ, так и других видов файлов (графических изображений, медиафайлов, текстовых документов и т.п.)
К примеру, если в автозагрузку добавить текстовый документ, то при включении ПК после загрузки системы вы его сразу увидите. Либо откроется плеер и будет проигрывать соответствующий трек. (Подробнее про способы добавления файлов в автозагрузку вы можете прочитать в статье: Автозагрузка. Добавление приложений в автозагрузку Windows)
Для того, чтобы это реализовать, нужно просто в теле бат-файла прописать точный путь до необходимого объекта. Например
Для системных же программ нужно указать лишь её обозначение.
При выполнении этого батника откроется калькулятор. В данном случае строчку chcp 1251 можно опустить (как и в некоторых ситуациях из примеров выше), однако если уж стандартизировать все наши пакетный файлы, то её можно и оставить, вреда не будет.
Часть шестая. Хитрости или шутки в сторону
Здесь рассмотрим ещё несколько интересных возможностей для применения батников. Из названия ясно, что некоторые из действий могут навредить системе (хотя это можно сделать и “голыми руками”), но если делать всё с умом, то может выйти достаточно интересно.
Шпионские штучки. Похищаем содержимое флешки
В самом начале статьи было указанно, что команды в батниках выполняются последовательно, если это не оговорено в самом теле исполнительного файла. Рассмотрим именно этот частный случай. Нуууу, допустим. Вы знаете, что к вам придёт знакомый (а может, знакомая) с просьбой произвести какие-то манипуляции с его/её флэш-карточкой, и вам очень хотелось бы слить все данные с этого накопителя на ваш ПК. Но делать это при госте не совсем удобно, да и просто можно получить “красную карточку”. Что мы в таком случае делаем? Создаём батник следующего содержания
Маленький вирус в автозагрузку
В общем виде всё будет выглядеть так: отправляем человечку файлик любым удобным способом, он запускает его на своём ПК, мы немного смеёмся, а потом говорим человечку, в чём соль и как всё исправить.Обычно, если что-то идёт не так, рядовой юзер первым делом перезагружает комп. Чтобы наш батник продолжал действовать и после рестарта, необходимо добавить его в автозагрузку (подчеркиваю, такие шутки проходят только с не самыми прошаренными пользователями ПК, более опытные, скорее всего, запросто найдут причину метаморфоз системы и легко избавятся от неё). Для этого в батничке пропише следующее
Начало обеих строк в виде copy %0 означает копирование “самого себя”.
Это сделали. Ещё нам хотелось бы, чтобы после запуска батника и при каждой загрузке ПК появлялась весёленькая надпись, к примеру, “ТЫ ЛАМЕР!”
Для этого добавляем следующее
Эта часть основанна на скриптах. Подробно расписывать не буду, кому интересно, найдёт материал в сети. Скажу лишь, что для некоторых ОС вид этого блока может слегка отличаться. Так, например, в семёрке (Win7) скрипт может выглядеть следующим образом
Однако, и первый вариант будет работать.
Также окошко с текстом можно добавить в обход скриптов, оно будет, так сказать, стилизованное, виндовое от текущего пользователя с указанием текущей даты и времени
Едем дальше, ближе к вкусностям.
Чтобы наш объект экспериментов растерялся ещё больше, в тело батника по желанию добавляем что-нибудь из следующего:
Команда rundll32 keyboard, disable отключит клавиатуру вплоть до следующей перезагрузки, а rundll32 mouse, disable то же самое проделает с мышью. Если батник в автозагрузке, то при рестарте это дело, разумеется, повторится.
rundll32 shell32, SHExitWindowsEx 1 – выключит ПК.
rundll32 shell32, SHExitWindowsEx 2 – перезагрузит ПК.
rundll32 url.dll, FileProtocolHandler https://ya.ru/ – откроет в Internet Explorer поисковую страничку яндекса (сайт вместо ya.ru, само собой, можно вписать любой). Если проявить фантазию, можно придать батнику особую пикантность.
Теперь остаётся только скомпоновать желаемые строки в единый код
Часть седьмая. Упаковка исполнительного файла
Здесь хочу отметить, что мало кто станет запускать ваш батник хотя бы потому, что он имеет немного подозрительный вид. Исправить это можно двумя способами:
Программный способ упаковки батников
- конвертировать bat-файл в *.exe при помощи какой-нибудь утилитки (например, bat to exe)создать sfx-архив.
- конвертировать bat-файл в *.exe при помощи какой-нибудь утилитки (например, bat to exe)
- создать sfx-архив.
Упаковка батников в SFX-архив
Т.е. когда дело дойдёт до этой команды, система переключится на исполнение файла с названием sled.bat, а затем вернётся к исходному.
Если же надо, чтобы работа первого батника не прерывалась, то используем другую команду
Вместо заключения
Будьте осторожны и удачных вам экспериментов
Операционные системы
и среды
Колледж телекоммуникаций СПбГУТ
Лекция № 13. Работа
с пакетными файлами

Лекция № 13. Работа с
пакетными файлами
Пакетный
файл (англ. 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 или подобных
оболочках.
Пакетные
файлы могут содержать как внутренние
команды, обрабатываемые непосредственно
COMMAND.COM или CMD.EXE, так и обращения к внешним
утилитам, существующим в виде отдельных
программ (.EXE файлов). Данные программы
значительно расширяют возможности
пакетных файлов.
Программирование
пакетных файлов появилось в MS-DOS и Windows
с самого зарождения этих операционных
систем. Командные интерпретаторы этих
систем предлагают два режима работы:
интерактивный режим (когда пользователь
непосредственно вводит команды в
командной строке и немедленно их
исполняет) и пакетный режим (когда
пользователь запускает предварительно
записанную последовательность команд).
Концепция обоих режимов была почерпнута
из различных Unix-оболочек, равно как и
из других текстовых интерфейсов командной
строки начала 1980-х годов, таких как CP/M.
Командный
интерпретатор в MS-DOS имеет название
COMMAND.COM. Эволюция этой ветви пакетного
программирования прошла через различные
версии MS-DOS к Windows 95, Windows 98 и, наконец, к
Windows Me. Наиболее известным пакетным
файлом в этих системах является
AUTOEXEC.BAT, специальный пакетный файл,
который исполняется во время загрузки
операционной системы.
Новые
версии Windows — Windows 2000, XP и Vista основаны
не на MS-DOS, а на Windows NT. NT-подобные системы
включают интерпретатор cmd.exe, который
частично совместим с COMMAND.COM. Некоторые
старые возможности MS-DOS недоступны,
однако вместо них появились дополнительные
возможности и команды. COMMAND.COM до сих пор
включается в NT-подобные системы для
обеспечения лучшей обратной совместимости.
Существуют
различные другие командные интерпретаторы,
разработанные не компанией Microsoft и
предоставляющие расширенный синтаксис
команд для пакетного программирования.
Примером может служить 4DOS.
Также
имеются различные компиляторы пакетных
файлов, превращающие пакетные файлы в
исполняемые программы.
Рассмотрим
на примере ОС MS-DOS
сновные команды, применяемые в пакетных
файлах
Эта
команда используется внутри командного
файла для вызова другого командного
файла. Когда вызываемый командный файл
заканчивает работу, управление передается
вызывающему файлу. Например, чтобы
последовательно вызвать файлы Start.bat
и Finish.bat,
надо в командный файл ввести команды
Эта
команда используется для ввода подсказки
пользователю. выполнение файла
приостанавливается и пользователь
может сделать выборы из указанного
набора выборы. Параметры команды:
текст
– пояснительный текст, который будет
показан перед подсказкой. Если текст
не указан, то выведется только подсказка.
/N-
если используется эта опция, то будет
показан текст подсказки, а сама подсказка
не выведется.
/S
– чувствительность к регистру.
К
подсказке можно добавить пояснительный
текст
choice
/c ync Yes(Да),No(Нет),Continue(Продолжить)
Для
ограничения времени можно использовать
опцию /Т
Если
в течение 10с выбор не будет сделан, то
по умолчанию будет выбрана опция С и
пакетный файл продолжит выполнение.
.
. . . .
Пользователь
при работе командного файла увидит на
экране
Это
сообщение командного файла
%%переменная
– любой символ,
набор
– одна или более спецификаций файлов.
Команда
осуществляет циклическое выполнение
команд. Может использоваться и в пакетной
и в диалоговой обработке.
Элементу
%%переменная последовательно присваивается
каждое из вхождений набора, затем
выполняется команда DOS,
указанная после DO.
for
%%x
in
(*.txt)
do
type
%%x //печатает
на экране все текстовые файлы текущего
каталога.
Выполняет
безусловный переход, т. е. передает
управление команде, находящейся в строке
после метки.
Метка-
первые 8 символов после двоеточия, может
вводиться с отступом, но предшествовать
метке могут только пробелы.
Если
указанная после goto
метка не найдена, то выводится сообщение
об ошибке и командный файл завершает
свою работу.
Цикл
можно закончить при нажатии Ctrl+Break.
Это
условие определяет проверку на наличие
или отсутствие файла на диске. Если
условие истинно, то выполняется указанная
команда.
Это
условие проверяет строки на равенство.
Если условие истинно, то выполняется
указанная команда.
if
not x==%1x goto print
В
этом примере командный файл работает
по разному в зависимости от того, были
ли введены в командную строку символы
после имени командного файла. Здесь х
– строка1, %1х
– строка2, %1
– переданный параметр.
Это
условие проверяет число ERRORLEVEL
(переменная, в которую записываются
значения в ОС DOS,
например, коды завершения программ).
Если ERRОRLEVEL
равна или больше(или не равна – NOT)
указанного числу, то выполняется команда.
Примеры:
if
errorlevel 1 goto copyfile
if
errorlevel 2 goto delfile
Приостанавливает
выполнение программы до нажатия клавиши
и выводит сообщение
Нажмите
любую клавишу. . .
pause
Вставьте дискету в дисковод А
Эта
команда приостановит выполнение
командного файла для вставки диска в
дисковод А.
Вставка
в командный файл сообщение, которые не
влияют на выполнение программы.
задает
путь поиска команды по умолчанию
т.
е. DOS
начинает писк команды с какталога а:,
затем переходит в c:windows,
потом в c:windowscommand
и т. д.
9.
Символы перенаправления ввода-вывода
<
– позволяет получить ввод не с клавиатуры,
а из указанного файла или устройства.
по дисциплине
“Операционные системы, среды и оболочки”
Командный
(или пакетный) файл в Windows — это обычный
текстовый файл (в формате ASCII), с расширением
bat или cmd, который содержит команды
операционной системы, а также некоторые
дополнительные инструкции и ключевые
слова. Строками пакетного файла также
могут быть вызовы исполняемых файлов
(.com,.exe,.bat), метки и специальные команды
пакетной обработки. Признаком метки
является двоеточие в начале строки.
Пакетные
файлы (ПФ) могут создаваться с помощью
любого текстового редактора либо
командой
Например,
если записать в файл deltmp.bat следующие
команды:
и
запустить его на выполнение (набрать в
командной строке deltmp.bat), то удалятся
все файлы во временной директории
Windows. Таким образом, исполнение командного
файла приводит к тому же результату,
что и последовательный ввод записанных
в нем команд. Очевидно, что если приходится
часто выполнять одни и те же действия,
то использование командных файлов может
сэкономить много времени.
Пакетный
файл, состоящий из двух команд вызова
вызовет стандартный
Калькулятор, а при его закрытии вызовет
Блокнот.
Общие правила
оформления пакетных файлов:
- для
запуска исполняемого
файла
из пакетного следует просто указать
его имя, - следует
указывать полный путь доступа к файлам,
если файл не содержится в текущем
каталоге, - допускается
использование подстановочных символов
звездочка (*) или вопросительный знак
(?) для замены наборов символов, - метка
всегда содержится в отдельной строке
и начинается
с двоеточия, - существование
любого файла можно проверить с помощью
операции exist:
значение
операции exist
имя
файла
равно True, если указанный файл существует.
Часто
бывает
удобно для просмотра сообщений, выводимых
из пакетного файла, предварительно
полностью очистить экран командой CLS.
С
помощью такого метода можно, скажем,
заполнять файлы-протоколы с отчетом о
произведенных действиях. Например:
XCOPY
C:PROGRAMS D:PROGRAMS /s
REM
Добавление сообщения в файл report.txt в
случае
REM
удачного завершения копирования
Символы
условной обработки используются для
ввода несколько команд одновременно и
управления работой команд в зависимости
от результатов их выполнения:
- Амперсанд (&) разделяет несколько
команд в одной командной строке. - Скобки
группируют несколько команд. - Точка
с запятой и запятая (; ,) разделяют
параметры команд. - Символ
(^) отменяет специальное использование
управляющего символа, и управляющий
символ можно использовать в тексте. - Двойной
амперсанд (&&) запускает команду,
стоящую за ним в командной строке,
только если команда, стоящая перед этим
символом была выполнена успешно.
Передача данных в командный файл
Довольно
часто возникает необходимость создать
один пакетный файл, но выполнять его
каждый раз с различными данными. Возможны
два способа передачи данных в пакетный
файл:
- с
помощью списка замещаемых параметров, - с
помощью системных переменных.
Если
в командной строке при вызове пакетного
файла задано меньше девяти параметров,
то “лишние” переменные из %1 – %9
замещаются пустыми строками.
Например,
пусть создан командный файл copier.bat
следующего содержания:
XCOPY
%1 %2 /S
Если запустить
его из командной строки с двумя
параметрами, например
то на экран выведется
сообщение
Файл
copier.bat копирует каталог C:Programs в D:Backup
и
произойдет копирование каталога
C:Programs со всеми его подкаталогами в
D:Backup.
При
необходимости использования более 10
параметров, необходимо воспользоваться
командой SHIFT.
Символ
“%” можно использовать в командах
внутри пакетного файла, но при этом
необходимо повторить его дважды.
Например, имя файла f%.exe должно выглядеть
как f%%.exe.
При
использовании второго способа (глобальных
переменных) перед запуском пакетного
файла с помощью команды SET необходимо
создать глобальные переменные (это
будут пользовательские системные
переменные) и присвоить им заданные
значения. Имена этих переменных при
использовании в командах пакетного
файла заключаются в символы “%”
(например, %FILE% ).
При
использовании параметров можно
анализировать значение передаваемого
в пакетный файл параметра, выделяя
определенные его части, например, можно
выделить только расширение файла-параметра
или только имя. Для параметра с номером
n (%n) допустимы синтаксические конструкции,
представлены в таблице



