Nickolay.info. Программы. BAT-файлы. Командные файлы в DOS/Windows |
Материал по теме «Командные файлы»
1. Определение командного файла. Командные (пакетные) файлы - особая категория исполняемых файлов.
Расширение: *.bat (от англ. batch - "пакет", "группа"). Запуск командного файла осуществляется так же, как запуск исполняемой программы, то есть, указывается имя файла и, если требуется, параметры.
Назначение: BAT-файлы служат для организации взаимодействия пользователей с прикладными программами.
Состав: текст, который интерпретируется командным процессором. Строки этого текста могут представлять собой:
Каждая команда находится на отдельной строке.
2. Команды пакетной обработки.
а) REM комментарий в тексте файла. Обычно используют, чтобы временно убрать из текста какую-либо команду. Формат: REM [любая строка]
б) ECHO вывод на экран сообщений. Формат: ECHO [ON или OFF или Сообщение]
Параметры ON и OFF включают и выключают выдачу на экран системных сообщений ("эха"). Команда ECHO OFF используется, чтобы не "засорять" экран при исполнении BAT-файла. Произвольная строка после ECHO понимается как сообщение и без изменений выводится на экран. Пустая строка обозначается одной точкой. Примеры:
echo. Перейти к следующей строке;
echo Программа не найдена! Выдает на экран сообщение "Программа не найдена!".
в) @. Может быть только первым символом строки и подавляет ее выдачу на экран. Используется только в пакетном режиме. Пример:
@echo off Выключаем "эхо"; из-за символа @ сама команда echo off тоже не выводится на экран; этой строкой обычно начинаются командные файлы.
г) PAUSE приостанавливает вывод на экран, выводит сообщение "Нажмите любую клавишу..." и ждет нажатия любой клавиши. Параметров не имеет.
д) IF позволяет проверять условие и выполнять ветвление в зависимости от результата проверки.
Общий вид команды: IF [NOT] [условие] [действие], где "действие" - любая команда, выполняемая, если истинно условие. Условие записывается в одной из трех форм, поэтому команда IF имеет три формата.
Формат 1. Проверка кода завершения последней перед оператором IF команды. Используется конструкция следующего вида: IF ERRORLEVEL число
Любая программа может выработать в момент своего окончания собственный код завершения, который доступен другим программам через переменную с именем ERRORLEVEL. Большинство команд и программ при нормальном завершении устанавливают errorlevel=0. Задав условие if errorlevel 1, Вы определите, что оно будет выполнено, если программа вырабатывает код завершения больший, либо равный 1.
Формат 2. Проверка наличия файла в каталоге. Оператор IF имеет вид: IF EXIST имя файла
Команда проверяет, существует ли файл с заданным именем. При обнаружении файла условие считается выполненным. Можно использовать маску - тогда условие выполнено, если найден хотя бы один подходящий файл.
Формат 3. Сравнение двух строк. Оператор имеет вид: IF [строка_1]==[строка_2]
Условие выполняется, если строки 1 и 2 совпадают. Чтобы застраховаться от случая, когда одна из строк оказывается пустой, обе строки заключают в одинаковые символы, например, в квадратные скобки.
Любое из этих трех условий может задаваться со знаком логического отрицания NOT. При этом истинность условия трактуется в обратном смысле. Примеры:
if exist c:\autoexec.bat type c:\autoexec.bat
если в головном каталоге диска c: есть файл autoexec.bat, вывести его на экран;
if not exist c:\WORK\*.* echo Нет файлов!
если в каталоге WORK нет ни одного файла, вывести соответствующее сообщение;
format a:
if errorlevel 1 echo Форматирование прошло не безупречно!
если программа format установила errorlevel больше нуля,сообщить об ошибке;
if %A%==Yes cls
если переменная с именем A равна строке 'Yes', очистить экран.
Аналогично команда IF может использоваться из командной строки.
е) GOTO позволяет передавать управление на заданную метку Формат команды: GOTO метка
Метка начинается со знака : Пример:
if %A%==Yes goto Clear
goto Not_Clear
:Clear
cls
:Not_Clear
Если переменная A совпадает со строкой Yes, перейти на метку Clear и очистить экран. В противном случае пропустить очистку экрана.
ж) CALL осуществляет вызов одного командного файла из другого с последующим возвратом в вызывающий файл. Формат команды: CALL [имя файла]
В имени вызываемого файла могут содержаться дополнительные параметры, которые обрабатываются вызванным файлом. Пример:
Вызывающий командный файл: (example.bat)
@echo off
echo Файл запущен!
call version
echo Продолжаем!
Вызываемый командный файл: (version.bat)
@echo off
echo Ваша версия операционной системы:
ver
pause
example.bat вызывает version.bat, после выполнения которого вновь получает управление.
з) Переменные в командных файлах используются для обмена информацией между отдельными командами. Существуют два их вида:
1) переменная, определяемая в цикле. Ее имя состоит символа процента (в старых версиях DOS/Windows - двух символов) и последующих букв, например, %A. Набор значений, которые последовательно принимает такая переменная, задается при ее определении в команде for (см. ниже).
2) переменная окружения. Она определяется внутренней командой DOS вида
SET [имя]=[значение],
где имя и значение - произвольные строки, и в течение всего сеанса работы хранится в специальной области памяти, называемой "системным окружением". Системное окружение управляется командным интерпретатором command.com. Чтобы использовать переменную окружения в командном файле нужно ее имя заключить в символы процента %, например, командами
set weekday=sunday
echo %weekday%
переменной с именем weekday присваивают значение sunday и выводят ее значение на экран командой ECHO. Для удаления переменной из окружения используют строку вида set имя=
Для просмотра окружения можно использовать команду SET без параметров.
В DOS и Windows, как правило, используются следующие стандартные переменные окружения:
и) FOR обеспечивает циклическое выполнение команд. Формат: FOR переменная IN (набор) DO действие
Понятие переменной определено выше. Набор - это одна или несколько строк, разделенных пробелами или запятыми. Чаще всего в качестве элементов набора выступают имена файлов или маски. Действие - любая допустимая команда. Цикл работает следующим образом: переменная последовательно принимает значения элементов набора и они подставляются в текст команды. Примеры:
For %a in (*.txt) do copy %a con
Переменной %%a последовательно присваиваются имена файлов с расширением txt из текущего каталога и каждый файл выводится на экран.
for %r in (*.*) do if exist a:\%r echo %r есть на диске a:
Команда перебирает файлы текущей директории и выясняет, есть ли на диске a: файл с таким же именем. Если такой файл существует, печатается сообщение. Вместо переменной %%r в команде ECHO каждый раз подставляется очередное имя файла.
for %z in (0,1,2,3,4,5,6,7,8,9) do if %z==%test% echo z=test=%z
Если переменная %z, принимающая значения цифр от 0 до 9, совпадает с переменной окружения test, печатается сообщение.
FOR может использоваться и в командной строке, например, для многократного выполнения команды, в которой нельзя использовать маску. Пример:
FOR %A IN (*.txt) DO TYPE %A
Все найденные в текущей директории файлы с расширением TXT последовательно выводятся на экран.
к) Параметры командного файла. При запуске из командной строки командному файлу могут быть переданы параметры. Они разделяются пробелами и количество их не может превышать девяти. Изнутри пакетного файла параметры доступны через строки вида %0, %1, ..., %9, где %0 - имя самого командного файла, %1 - имя первого параметра и так далее. Например, мы запускаем командный файл MOVA.BAT командой mova.bat *.tmp *.txt *.doc
После запуска параметр %0 равен строке "mova.bat", параметр %1 - строке "*.tmp" и т. д. Наш командный файл должен перемещать файлы, подходящие под переданные ему маски, на диск a:. Для первого параметра это легко сделать двумя командами: copy %1 a:\%1 и del %1. Первая копирует файлы на диск a:, вторая уничтожает источник копирования. Для второго параметра мы могли бы повторить те же команды, подставив в них %2 вместо %1. Но программа сразу же становится нерациональной, тем более, что число параметров заранее неизвестно. Помочь нам может команда SHIFT, которая сдвигает параметры командного файла на один влево. После применения SHIFT параметру %0 присваивается старое значение %1, в нашем случае это строка "*.tmp", а параметр %1 принимает значение "*.txt". Теперь этими же двумя командами мы можем обработать любое число параметров. Позаботившись об условии выхода из программы, получаем ее окончательный текст:
@echo off
:LOOP
copy %1 a:\%1
del %1
shift
if not [%1]==[] goto LOOP
Благодаря команде SHIFT мы каждый раз обращаемся лишь к первому из переданных параметров и правильность работы не зависит от числа переданных параметров. Если очередная строка с маской не пуста, оператор goto LOOP передает управление к началу программы.
л) Дополнительные средства для написания командных файлов.
Рассмотренные выше команды пакетной обработки позволяют организовать автоматический запуск программ и обработку файлов. Не хватает лишь возможностей пользователя влиять на этот процесс, в частности, возможности выполнять действия в зависимости от выбора с клавиатуры.
В состав большинства версий DOS/Windows включена внешняя команда choice, служащая для выбора действия. Формат команды:
CHOICE [/C:клавиши] [/N] [/T:выбор,время] [сообщение]
Здесь сообщение - любая строка текста, клавиши - список буквенных обозначений клавиш, допустимых для выбора. По умолчанию прописные и строчные буквы не различаются, а если список клавиш не указан, принимается /C:YN. Параметр /N запрещает вывод после сообщения списка клавиш и знака вопроса, а после параметра /T могут быть указаны выбор, принимаемый при отсутствии ввода с клавиатуры и время в секундах, через которое он будет сделан.
Результат работы команды - установка значения ERRORLEVEL равным порядковому номеру в списке выбранной клавиши. Например, после ввода команды
choice /c:01 /n /t:0,5 Продолжить?(1-да,0-нет)
значение ERRORLEVEL будет установлено в 1 при нажатии клавиши 0 или отсутствии ввода с клавиатуры в течении 5 секунд, а при нажатии клавиши 1 программа установит значение ERRORLEVEL, равное 2.
Скачать CHOICE.COM в архиве ZIP (2 Кб)
гостевая; E-mail |