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

Bat файлы представляют собой текстовые документы, которые содержат в себе список последовательно выполняющихся команд (инструкций). Они могут быть очень простыми, что обычный пользователь может воспользоваться ими. В сегодняшней теме разберем, что такое батник, как создать bat файл в Windows 7, 8 , а также рассмотрим пример пакетного файла.

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

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

Создание bat файла

Для создания батника потребуется текстовый редактор (блокнот, notepad ++) и . Примерный алгоритм смотрите ниже.

1. Создайте текстовый документ, расширение которого txt. Нажмите правой кнопкой на пустой области проводника или другого места. Наведите на «создать» , затем из подменю выберите «текстовый документ». Задайте ему имя, к примеру, batnik.

2. Скачайте notepad ++, затем установите его. Откройте batnik.txt в notepad ++, выберите «кодировки», наведите курсор на «кодировки», «кириллица», нажмите на OEM 866. Проделайте этот шаг, если используете вывод русских слов (пояснений) в сценарии, иначе Вы увидите кракозябры (не корректные символы). Далее пропишите команды. Например, скопируйте такой текст:

@echo off
echo Привет – тест bat файла
pause
dir c:\windows
pause

4. Двойным щелчком запустите batnik.bat для выполнения последовательности команд. После того как bat файл исполнится, он автоматически закроется.

Еще вы можете запустить блокнот, нажать Win + R, ввести в строку notepad и кликнуть Enter. После прописывания кода, нажмите «файл», а затем «сохранить как». В окне задайте путь сохранения, имя файла с расширением bat и щелкните «сохранить». Аналогичные действия проделайте с notepad ++ для изменения кодировки (шаг 2), если будите использовать русские символы.

Пример бат файла

Сейчас рассмотрим создание bat файла в Windows 7, 8 , который дает сведения о сети, проверяет соединение с интернетом и наглядно показывает действие батников. Создайте бат файл и пропишите такие строки.

ECHO OFF
:: очиститель.
ECHO Сведения о подключениях.
:: вывод текста на экран, который идет после служебного слова ECHO.
IPCONFIG /ALL
:: распечатывает информацию о всех сетевых подключениях.
PAUSE
:: приостанавливает выполнение сценария, чтобы Вы могли просмотреть сетевую информацию.
PING yandex.ru
:: Пинг, проверяющий наличие (отсутствие) соединения с интернетом
ECHO Операция выполнена. Нажмите ввод!
:: вывод на экран слов после ECHO, которые знаменуют выполнение PING.
PAUSE
:: Эта последняя команда пишется, для того чтобы увидеть сведения о соединении. Если ее не было бы, тогда сценарий батника прекратился, и произошло закрытие окна.

На самом деле, примеров бат файлов для обучения, скачивания в сети есть огромное количество. Вам достаточно изучить синтаксис и команды, чтобы создать свой батник под свои нужды. Надеюсь, Вы поняли для чего нужны батники, и как создать bat файл в Windows 7,8 .

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

Что такое bat-файлы?

Bat-файлы или «батники» называют так из-за их разрешения (BAT). Bat-фалы это по сути текстовые файлы, которые содержат от одной до нескольких строчек кода командной строки. Запуск BAT-файлов выполняется простым двойным кликом по нему. Записанные в нем команды будут выполняться последовательно, при этом появится окошко командной строки. После завершения выполнения команд окно командной строки закроется. Вы моги замечать, как работают такие файлы при установке игр и приложений. В таких окнах очень часто происходит распаковка архивов большой степени сжатия с отображением процента распаковки. Если же «батник» содержит всего несколько простых команд, то окно командной строки может появиться всего на несколько миллисекунд и исчезнуть с экрана.

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

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

Как создать bat-файлы?

Предположим, вам необходимо создать «батник», который будет запускать определенные программы в заданной последовательности. При этом чтобы не создавать на рабочем столе несколько ярлыков и запускать каждый из них мышкой удобно создать один единственный bat-файл и запускать его, а он уже в свою очередь запустит все те приложения.
Для создания bat-файла вам понадобится простой текстовый редактор, традиционно в системе Windows пользуются Блокнотом. Запустите текстовый редактор и впишите в него несколько строк, которые соответствуют синтаксису команд командной строки.

Например, для запуска приложений:

start explore
start calc
start iexplore

После чего сохраните этой файл на Рабочем столе с понятным для вас именем, например «Запуск прог». Расширение сохраненного файла при этом надо изменить с TXT на BAT. Если у вас не отображается расширение файла, то необходимо включить отображение расширений файлов. Сделать это можно в настройках параметров папки через Панель управления или в самом проводнике. После того, как вы поменяете расширение, сделайте пробный запуск сохраненного файла. При выполнении указанного выше примера произойдет запуск сразу трех программ: Проводника, Калькулятора и Internet Explore.

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

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

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

Создать BAT файл очень просто. Достаточно открыть блокнот и сохранить пустой лист с расширением .bat , выбрав опцию Сохранить как... и написав в поле Имя файла что-нибудь оканчивающееся на .bat , например test.bat .
Тип файла указываете как на скриншоте ниже - Все файлы . Сохраняете и получаете BAT файл.

Редактировать BAT файл можно в блокноте или любом другом текстовом редакторе, ориентированным на работу с кодом.

Теперь перейдем непосредственно к практической информации. В сети многие ищут ответ на вопрос Как быть с пробелами в BAT файлах? . В путях к папкам и исполняемым файлам наличие пробела вызывает ошибку. Самый распространенный ответ: Заключи путь в кавычки. И этот ответ не верен. Правда некоторые будут с пеной у рта утверждать, что он работает. Итак, появилось два почему - почему не верен и почему некоторые будут.

На Windows (как, впрочем, и на UNIX) установленные в системе программы соответствующим образом регистрируются системой. Поэтому некоторые из установленных программ могут запускаться одной простой командой из BAT файла или из апплета Выполнить панели Пуск. Одной из таких программ является Firefox:

start firefox

Если после этой команды писать путь к исполняемому файлу, то происходит следующее: запускается обозреватель Firefox и пробует обработать запрос, то есть файл, путь к которому указан. То есть, если указать следующее:

start firefox C:\Program Files\Mozilla Firefox\firefox.exe

Обозреватель откроется, чтобы не было написано после start firefox . Именно поэтому некоторые товарищи будут уверять что все прекрасно работает. Однако, если взять портативную программу, то ситуация окажется совсем иная. Рассмотрим в качестве примера ftp-клиент Filezilla. Поскольку система не знает о программе, вышеупомянутая строчка

start filezilla

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

start D:\FileZilla\FileZilla.exe

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

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

start C:\Program Files\Sound Club\scw.exe

В примере два имени с пробелами. Заменим их короткими. Правила создания коротких имен следующие: в коротком имени используются первые шесть символов имени без учета пробелов, после имени указывают порядковый номер папки с помощью символа ~ . Так как папки 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-файлах

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

start "C:\Program Files\Sound Club\scw.exe"

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

START ["заголовок"] [команда/программа] [параметры]

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

start "" "C:\Program Files\Sound Club\scw.exe"

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

start C:\"Program Files"\"Sound Club"\scw.exe

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

%SystemDrive% cd \Program Files\Sound Club\ start scw.exe

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

start firefox start jetaudio rem start defraggler

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

start firefox start jetaudio rem start defraggler exit

Запуск приложений из bat-файла

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

Выше было изложено несколько способов запуска приложений при помощи BAT файла. Самый первый - это короткая команда на запуск установленной в системе программы.

start firefox

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

start C:\"Program Files"\"Mozilla Firefox"\firefox.exe

Также я отметил, что в BAT файле обязательно должна присутствовать команда на завершение:

start C:\"Program Files"\"Mozilla Firefox"\firefox.exe exit

Запуск программ в bat-файлах с параметрами (ключами)

Программу можно не просто запускать, а давать ей дополнительные команды при запуске. Например, скомандовать запускаться свернутой:

start /min D:\FileZilla\FileZilla.exe exit

Скомандовать в данном случае - значит указать ключ. Ключ указывается через слэш после основной команды (команда /ключ ). Основной командой в данном случае является start . Правда ключ min работает только в половине случаев, потому как относится именно к команде запуска start , а не к программам, которые эта команда запускает.

Вообще ключей существует очень много и наборы ключей разных программ могут существенно различаться. Есть, правда, несколько общих. Например, ключ справки (/? или /help ). Чтобы проследить работу этого ключа, рассмотрим практический пример. Откройте консоль (Жмёте + R , вводите cmd , далее Enter ) и набираете в консоли следующее:

start /?

Консоль выведет на экран перечень допустимых ключей c комментариями для команды start .

Обратите внимание на ключ /wait . В некоторых случаях он бывает просто незаменим. Например, вы решили с помощью BAT файла распаковать архив с программой и эту самую программу запустить. В батнике получится две команды - на распаковку и на запуск. Поскольку команды при запуске BAT файла выполнятся почти одновременно, архив распаковаться не успеет и запускать будет нечего. Поэтому будет ошибка. В этом случае на помощь придет ключ /wait :

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

start Sleep.exe 15

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

/S /s /q /silent и ряд других

В ряде случаев бывает очень удобно. Антивирус Avast имеет опцию тихой установки в корпоративной версии. В бесплатной (домашней) версии тихой установки якобы нет. Однако, если вы в курсе как работает инсталятор InstallShield , вы поймете, что это утка, так как этот инсталятор сам по себе поддерживает ключ тихой установки /S . А значит все продукты, выполненные на его базе - тоже. И Avast не исключение. Просто создаете в папке с Avast"ом BAT файл с содержанием

start avast.exe /S exit

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

Есть и другие возможности по управлению программами при помощи BAT файлов. Можно запустить программу, приказав ей открыть файл при запуске. Я пользуюсь этим способом при разработке сайтов. Очень удобно, когда весь твой инструментарий открывает нужные документы и папки нажатием всего одной кнопки:

rem соединение с ftp-сервером start /min D:\FileZilla\FileZilla.exe "ftp://логин:пароль@сервер" rem открытие index.php в Firefox start C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php" rem открытие start.html в текстовом редакторе start /min C:\"Program Files"\текстовой_редактор.exe "E:\сервер\папка_сайта\index.html" rem открытие папки с файлами сайта start /min E:\сервер\папка_с_сайтом rem выход из консоли exit

Отмечу, что все вышеописанные приемы можно применять в различных комбинациях и сочетаниях.

start /min /wait program.exe /m /S start C:\Directory\program2.exe "C:\Files\file.odt" exit

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

start C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php"

В качестве эпилога предложу для ознакомления конвертер BAT файлов в приложения формата .exe - . BAT файл - это не всегда эстетично, а с помощью конвертера можно запаковать батник в exe"шник, оформив его любой иконкой на ваш выбор.

Наткнулся ещё на один конвертер BAT в EXE, можете рассмотреть в качестве альтернативы предыдущей программе: Advanced Bat To Exe Converter

Сегодня мы узнаем про то, что такое bat файл и заодно создадим один из них.

Думаю, что многие, так или иначе, периодически создают (так называемые backup -ы) тех или иных файлов и папок.

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

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

Поехали.

Bat файл - что к чему, вводная

Для начала немного о том, что такое 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-ника.

Хотите знать и уметь, больше и сами?

Мы предлагаем Вам обучение по направлениям: компьютеры, программы, администрирование, сервера, сети, сайтостроение, SEO и другое. Узнайте подробности сейчас!

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

Давайте подготовим небольшое тестовое поле, чтобы было на базе чего экспериментировать. Откройте мой компьютер и создайте на диске C:\ папочку test . Зайдите в неё и создайте в ней папку .

Накидайте туда файлов (штук 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 файл "а зачастую экономит кучу времени, т.е. один раз написал и периодически запускаешь одним кликом и вместо многоминутных тычков мышкой и ползания по всем папкам получаешь автоматизированный процесс копирования.

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

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

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

В этой статье:

  • Определение переменных
  • Переменные командной строки (параметры вызова bat-файла)
  • Оператор условия IF
  • Функции
  • Использование возвращаемых значений (обработка кода завершения программы)

Определение переменных

SET <Имяпеременной>=<Значениепеременной>

Оператор SET представляет собой расширение возможностей работы с параметрами в операционной системе. Он задает переменную, значение которой подставляется вместо ее имени при любом использовании этого имени между знаками процента. Так, если задано (переменная, которую требуют многие игры, использующие звуковую карту компьютера):

SET BLASTER=A220 I5 D1 P330

то при использовании в пакетном файле следующей конструкции:

ECHO %BLASTER%

на экран будет выведено "A220 I5 D1 P330". Переменные, определенные с помощью оператора SET называются переменными окружения среды (environment) и являются видимыми после выполнения до перезапуска DOS (если не изменять ее вручную в памяти). То есть, ее можно использовать из одного пакетного файла или программы после задания в другом. Наиболее известной является переменная PATH, представляющая собой набор путей для быстрого поиска файлов. Она задается в файле autoexec.bat.

Переменные командной строки
(параметры вызова bat-файла)

%<цифра 0-9>

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

Всего может быть 10 одновременно существующих независимых переменных. Для написания сложных программ это довольно мало, хотя для обычной работы часто хватает и 3-4. Значение переменной равно значению соответствующего параметра из командной строки. Переменная %0 будет содержать имя.bat-файла и, если вы указали, путь к нему. То есть, если вы запустили файл abc.bat со следующими параметрами:

abc.bat a bc def

то переменная %0 будет содержать значение abc.bat , %1 будет содержать значение a, %2 будет содержать bc , а %3 - def . Это свойство широко используется для создания универсальных пакетных файлов при работе с повторяющимися операциями.

Чтобы получить более чем 10 переменных из командной строки, можно воспользоваться командой SHIFT .

Команда SHIFT позволяет использовать число параметров командной строки далее 10. Однако, при этом теряются соответственно более ранние параметры. Иными словами, команда SHIFT сдвигает все значения переменных на один шаг влево. То есть, переменная %0 будет содержать значение, содержавшееся до этого в переменной %1 , а переменная %1 - значение переменной %2 до сдвига. Однако, данная операция является необратимой, то есть, невозможно сдвинуть переменные обратно.

Оператор условия IF

К счастью, командный интерпретатор cmd.exe современных ОС Windows 2000 и старше поддерживает блоки команд в конструкциях ветвления, что устраняет необходимость применения IF с метками. Блоки команд заключаются в круглые скобки. Выглядит это так (имитируя C/C++ indentation style):

if condition (

Rem Команды ветки ‘then’

Rem ...

) else (

Rem Команды ветки ‘else’

Rem ...

Конкретный пример использования:

@echo off

set BUILDMODE=%1

if "%BUILDMODE%" == "" (

Echo FAIL: Аргумент является обязательным ^(--debug, --release^)

Exit /b 1

rem Удаляем из аргумента все дефисы для упрощения обработки

set BUILDMODE=%BUILDMODE:-=%

if "%BUILDMODE%" == "debug" (

Set CCFLAGS=/Od /MDd /Z7

) else (

Set CCFLAGS=/O2 /MD

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

if "%BUILDMODE%" == "debug" (

Echo INFO: Устанавливаем debug-режим окружения

Set OPTFLAGS=/Od

Set CCFLAGS=%OPTFLAGS% /MDd /Z7

) else (

Echo INFO: Устанавливаем release-режим окружения

Set OPTFLAGS=/O2

Set CCFLAGS=%OPTFLAGS% /MD

Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.

Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…% , будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe , либо использованием команды:

в тексте самого bat-файла. Второй способ мне представляется более удобным – не очень здорово требовать от кого-то запуска твоего сценария с определенным параметром.

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

setlocal enabledelayedexpansion

if "%BUILDMODE%" == "debug" (

Echo INFO: Setting up debug mode environment

Set OPTFLAGS=/Od

Set CCFLAGS=!OPTFLAGS! /MDd /Z7

) else (

Echo INFO: Setting up release mode environment

Set OPTFLAGS=/O2

Set CCFLAGS=!OPTFLAGS! /MD

Вот теперь это почти полноценный if-then-else блок. Почти, потому что если в одной из команд echo у вас встретится закрывающая круглая скобка, то вам необходимо заэкранировать ее символом ^, иначе синтаксический анализатор путается…

Но в любом случае, это гораздо лучше безумного количества меток и переходов.

Функции

А можно создать в bat-файле функцию? Да, можно. Более того, иногда даже нужно. Правда, функциями это можно назвать условно.

Есть особый синтаксис команды call , который позволяет перейти на метку в этом же bat-файле с запоминанием места, откуда был произведен этот вызов:

call:метка аргументы

Возврат из функции производится командой:

exit /b [опциональный код возврата]

Ключ /b здесь очень важен: без него будет произведен выход не из функции, а из сценария вообще.

За подробностями наберите в командной строке:

call /?

exit /?

Что интересно, команда call с таким синтаксисом поддерживает рекурсивные вызовы с автоматическим созданием нового фрейма для переменных аргументов %0-%9. Иногда это может быть полезным. Вот классический пример рекурсивного подсчета факториала на командном языке:

@echo off

call:factorial %1

echo %RESULT%

exit

rem Функция для подсчета значения факториала

rem Вход:

rem %1 Число, для которого необходимо подсчитать факториал

rem Выход:

rem %RESULT% Значение факториала

:factorial

if %1 == 0 (

Set RESULT=1

Exit /b

if %1 == 1 (

Set RESULT=1

Exit /b

set /a PARAM=%1 - 1

call:factorial %PARAM%

set /a RESULT=%1 * %RESULT%

exit /b

Пример работы:

> factorial.bat 10

3628800

Использование возвращаемых значений
(обработка кода завершения программы)

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

Каким же образом пакетный файл может узнать код завершения выполненной программы? Для этого предусмотрено ключевая переменная ERRORLEVEL .

Пример пакетного файла с errorlevel"ами:

@ECHO OFF

REM Запускаем программу prg1.exe

PRG1.EXE

REM Анализ кода завершения

IF ERRORLEVEL 2 GOTO FILENOTFOUND

IF ERRORLEVEL 1 GOTO WRITEERROR

IF ERRORLEVEL 0 GOTO EXITOK

GOTO ONEXIT

:FILENOTFOUND

ECHO Ошибка! Файл не найден!

GOTO ONEXIT

:WRITEERROR

ECHO Ошибка записи!

GOTO ONEXIT

:EXITOK

ECHO Программа завершена благополучно.

GOTO ONEXIT

:ONEXIT

Обратите внимание - анализ кода завершения начинается не с нуля, а с максимально возможного значения. Дело в том, что подобная проверка означает: "если errorlevel больше или равен значению, то...". То есть, если мы будем проверять, начиная с нуля, любое значение будет истинным на первой же строке, что неверно.

Это самая распространенная ошибка в подобного рода программах.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то