Передача данных в командный файл Командные файлы
Цель работы: получить навыки написания и отладки простых командных файлов.
Технические средства: виртуальная машина с ОС Windows XP.
ОБЩИЕ СВЕДЕНИЯ
Командные файлы (КФ, скрипты, сценарии, батники) - это специальные текстовые файлы с расширением bat или cmd, строки которых представляют собой специальные команды ОС или имена исполняемых файлов, выполняемых за один раз (пакет команд). Строками КФ могут быть команды ОС, вызовы исполняемых файлов (.COM, .EXE, .BAT), метки и специальные команды пакетной обработки. Признаком метки является двоеточие в начале строки.
Строки командных файлов обрабатываются специальной программой - командным процессором операционной системы, часто называемым интерпретатором команд. Для операционных систем DOS и Windows9X в качестве интерпретатора команд используется command.com, для Windows NT и старше - cmd.exe.
Строки командных файлов могут содержать специфические команды самого процессора команд (FOR, ECHO, REM и т.п.) или имена исполняемых модулей (net.exe, regedit.exe, sc.exe) Командный процессор может быть запущен в интерактивном режиме через Пуск - Выполнить - CMD.EXE. В данном режиме, вы увидите окно консоли с приглашением к вводу команд. Возможный список большинства консольных команд можно получить введя: HELP.
Подробную справку по использованию cmd.exe можно получить, введя в качестве аргумента ключ /?
cmd.exe /?
Справочную информацию по конкретной команде можно получить, указав ее название в качестве параметра команды HELP:
HELP Имя команды
КФ могут создаваться с помощью любого текстового редактора либо командой:
COPY CON <имя>.BAT
Все строки, введенные с клавиатуры, после этой команды будут записаны в КФ. Ввод КФ завершается нажатием CTRL+Z.
Основные особенности командных файлов:
· каждый КФ должен иметь расширение .BAT (или CMD);
· запуск КФ на выполнение проводится путем указания его имени в командной строке или из любого файлового процессора;
· для прекращения выполнения КФ необходимо нажать клавиши CTRL+C;
· в КФ можно использовать символы переназначения ввода/вывода и конвейер команд;
· в начале командной строки в КФ можно вставлять специальный символ @, чтобы предотвратить эхо-воспроизведение этой строки на экране;
· смена устройства и каталога в команде оказывает воздействие на выполнение последующих команд этого КФ;
· установка переменных окружения также влияет на выполнение последующих команд.
Внешний вид окна CMD.EXE (консоли Windows) можно изменить с помощью команды COLOR.
В качестве аргументов для команды используются 2 шестнадцатеричные цифры, задающие цвет фона и цвет символа.
COLOR F0 - черные символы на белом фоне.
COLOR 0E - светло-желтые символы на черном фоне.
ПЕРЕНАПРАВЛЕНИЕ ВВОДА/ВЫВОДА
Работа с командным процессором предполагает использование двух устройств - устройства ввода (клавиатуры) и устройства вывода (дисплей). Однако, имеется возможность изменить стандартно используемые устройства ввода-вывода с помощью специальных символов - символов перенаправления
> - перенаправление вывода;
< - перенаправление ввода.
Для вывода справки не на экран а, например, в файл с именем help.txt, можно использовать следующую команду:
HELP > help.txt.
При выполнении данной команды, в текущем каталоге будет создан файл с именем help.txt, содержимым которого будет результат вывода команды HELP. Если файл help.txt существовал на момент выполнения команды, его содержимое будет перезаписано.
Для того чтобы дописать данные в конец существующего файла, используют удвоение символа перенаправления вывода - ">>".
Пример перенаправления вывода:
HELP GOTO > myhelp.txt - в файл myhelp.txt будет выдана справка по использованию команды GOTO.
HELP COLOR >> myhelp.txt - в конец файла myhelp.txt будет дописана справка по использованию команды COLOR.
Простейший пример перенаправления ввода:
cmd.exe < commands.txt - командный процессор не будет ожидать ввода команд с клавиатуры, а считает их из файла commands.txt.
ЗАПУСК КОМАНДЫ ПРИ СТАРТЕ КОМАНДНОГО ПРОЦЕССОРА
При запуске командного процессора можно указать конкретную команду в качестве аргумента командной строки:
cmd.exe /C HELP FOR - выполнить команду HELP FOR и завершиться (ключ /C);
cmd.exe /K HELP FOR - выполнить команду HELP FOR и перейти в режим ожидания дальнейшего ввода команд (ключ /K).
СИМВОЛЫ ОБЪЕДИНЕНИЯ КОМАНД
Кроме символов перенаправления ввода-вывода в командной строке могут использоваться символы объединения команд - && и ||.
Пример:
cmd.exe /C "HELP IF > nul" && Echo HELP Executed || Echo HELP Not Executed - выполнить команду HELP IF и при успешном результате выполнить команду Echo HELP Executed, а при неуспешном - Echo HELP Not Executed. Команды, объединяемые для выполнения с помощью конструкции &&, не нужно заключать в двойные кавычки. Выполнение строки:
cmd.exe /C "HELP IF > nul" && Echo HELP Executed || Echo HELP Not Executed
завершится сообщением HELP Executed, а выполнение:
cmd.exe /C "HELP uIF > nul" && Echo HELP Executed || Echo HELP Not Executed
где неверно задан аргумент команды HELP ( uIF ), завершится сообщением HELP Not Executed.
Файлы с расширением .bat или .cmd в среде Windows стандартно открываются командным процессором аналогично примеру, где список команд считывается не с устройства ввода, а из текстового файла.
ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ В КОМАНДНЫХ ФАЙЛАХ
Существует такое понятие, как переменные окружения (environments) - это переменные, значения которых характеризуют среду, в которой выполняются команда или пакетный файл. Иногда их называют переменными среды. Принимаемые значения этих переменных формируются при загрузке, регистрации пользователя в системе, старте или завершении некоторых приложений, и, кроме того, могут быть заданы с помощью специальной команды SET:
SET переменная=строка
переменная - имя переменной среды;
строка - строка символов, присваиваемая указанной переменной.
Например, командная строка:
SET myname=Vasya
создает переменную myname, принимающую значение Vasya.
Значение, присвоенное какой-либо переменной окружения, доступно для обработки в командных файлах, при использовании ее имени, заключенного в знаки процента - %. Например команда выдачи текста на дисплей ECHO в виде:
ECHO date - выведет на экран слово "date", а команда ECHO %date% выведет на экран значение переменной date - текущую дату в формате операционной системы.
СИНТАКСИС СПЕЦИАЛЬНЫХ КОМАНД ПАКЕТНОЙ ОБРАБОТКИ
Все команды пакетной обработки являются внутренними командами.
Команда: CALL
Назначение: вызывает пакетный файл из другого пакетного файла.
Формат: CALL [d:][path] filename [parameters]
Параметры:
filenames - имя вызываемого КФ;
parameters - параметры, передаваемые вызываемому КФ;
Комментарий: управление возвращается в вызывающий КФ.
Пример:
CALL SAM - вызов КФ из текущего каталога.
Команда: ECHO
Назначение: включение/отключение вывода команд КФ на экран монитора или вывод сообщения.
Формат: ECHO [ON|OFF] [message]
Параметры:
ON- включить вывод команд на экран;
OFF - выключить вывод команд на экран;
message - текст сообщения.
Комментарий: если команда подана без параметров, то выводится текущее состояние (ON или OFF).
Пример:
@ECHO OFF - отключить вывод команд на экран, команда ECHO тоже не выводится на экран.
Команда: FOR
Назначение: циклическое выполнение команды.
Формат: FOR %%var IN (set) DO command
Параметры:
var - имя переменной, возможные значения от A до Z;
set - список имен или текстовых строк, которые должны быть подставлены в цикле на место %%var;
command - выполняемая команда.
Комментарий: формальная переменная %%var последовательно заменяется фактическими значениями из списка set и при каждой замене выполняется команда command.
Если FOR запускается не из пакетного файла, а из командной строки, то вместо двух символов “%” нужно включить только один. Команда COMMAND не может использоваться в цикле FOR.
Пример:
FOR %%E IN (A,B,C) DO DEL %%E.OBJ - удаление из текущего каталога файлов A.OBJ, B.OBJ и C.OBJ.
Для рекурсивной обработки каталогов диска используется команда FOR /R.
FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры].
Ключ /R означает выполнение команды для каталога [диск:]путь. Если в команде путь не задан, то обработка выполняется для текущего каталога.
Простой пример удаления файлов с расширением .tmp из каталога C:\TEMP:
FOR /R C:\temp\ %%i IN (*.tmp) DO del %%i.
При выполнении команды возможно использование подстановочных значений переменной цикла для получения имен дисков, папок, файлов и их характеристик. Полный список возможных значений в случае использования переменной с именем i:
%%~i - из переменной %%i удаляются обрамляющие кавычки (");
%%~fi - переменная %%i расширяется до полного имени файла;
%%~di - из переменной %%i выделяется только имя диска;
%%~pi - из переменной %%i выделяется только путь к файлу;
%%~ni - из переменной %%i выделяется только имя файла;
%%~xi - из переменной %%i выделяется расширение имени файла;
%%~si - полученный путь содержит только короткие имена;
%%~ai - переменная %%i принимает значение атрибутов файла;
%%~ti - переменная %%i принимает значение даты /времени файла;
%%~zi - переменная %%i принимает значение размера файла.
Возможно объединение нескольких операторов:
%%~dpi - переменная %%i заменяется только на имя диска и путь;
%%~nxi - переменная %%i заменяется только на имя файла и его расширение:
%%~fsIi - переменная %%i заменяется только на полный путь с краткими именами;
%%~ftzai - переменная %%i заменяется на строку, выдаваемую командой DIR.
Например, значение переменной %%pi внутри цикла команды FOR /R будет последовательно принимать значения путей папок, начиная с заданного набора [диск:]путь.
Нижеприведенная команда выдает имена всех вложенных каталогов текущего диска (откуда запускается КФ) в файл dirlist.txt с помощью значения переменной %%~pi:
for /R %%i in (C) DO (ECHO Папка "%%~pi" >> C:\dirlist.txt).
Если в цикле команды FOR /R используются подстановочные значения переменной %%i, то в качестве набора (in) не стоит использовать символ точки, т. к. при использовании подстановочных значений, можно получить возврат из текущего каталога на уровень выше.
Команда: GOTO
Назначение: передача управления на строку КФ, следующую за заданной меткой.
Формат: GOTO label
Параметры:
label- метка строки, на которую передается управление.
Пример:
GOTO END - переход на указанную метку.
Команда: IF
Назначение: условное выполнение команд.
Формат:
а) для проверки значения глобальной переменной ERRORLEVEL
IF [NOT] ERRORLEVEL value command
б) для сравнения двух символьных строк
IF [NOT] string1 = = string2 command
в) для проверки существования заданного файла
IF [NOT] EXIST [d:][path] filename command
Параметры:
value – целое число в диапазоне от 0 до 255;
command - выполняемая команда;
string1,string2 - текстовые строки.
Комментарий: если условие истинно, то выполняется указанная команда. Условие в первом формате истинно, если значение ERRORLEVEL больше или равно заданному значению value.
Примеры:
а) IF NOT EXIST FILE.DAT ECHO Файл не существует;
б) IF ERRORLEVEL 1 GOTO END - переход на метку END, если значение ERRORLEVEL больше или равно 1.
Команда: PAUSE
Назначение: реализация паузы при выполнении КФ.
Формат: PAUSE [comment]
Параметры:
comment - текстовая строка.
Комментарий: по этой команде выполнение КФ приостанавливается и на экран выводится сообщение comment. Длина сообщения не может превышать 121 символ. Выполнение КФ возобновляется при нажатии на любую клавишу, кроме CTRL+C или CTRL+BREAK. Эти сочетания завершают выполнение КФ.
Пример:
PAUSE Установите новую дискету А: - пауза с выдачей сообщения на экран.
Команда: REM
Назначение: ввод комментария.
Формат: REM [comment]
Параметры:
comment - строка коммантария.
Комментарий: команда REM может использоваться для временного отказа от выполнения отдельных команд КФ. Если эхо-сопровождение включено, то строка comment выводится на экран, в противном случае – не выводится.
Команда: SHIFT
Назначение: сдвиг значений параметров командной строки запуска КФ на одну позицию влево.
Формат: SHIFT
Комментарий: используется при передаче данных в КФ с помощью замещаемых параметров. Например, после команды SHIFT в %0 будет находится первый параметр из командной строки, а в %9 - десятый параметр.
Команда: CHOICE
Назначение: опрос пользователя и запись ответа в переменную окружения ERRORLEVEL.
Формат: CHOICE [/C: string] [/T: key,n] text
Параметры:
string – символьная строка, содержащая список возможных ответов пользователя;
key – вариант ответа, который будет выбран по умолчанию, если пользователь в течение n секунд не вводит свой вариант ответа;
text – строка символов, которая будет выведена на экран перед возможными вариантами ответа.
Пример:
CHOICE /C: A,B,C,D /T: A,5 Сделайте Ваш выбор.
Передача данных в командный файл
Довольно часто возникает необходимость создать один КФ, но выполнять его каждый раз с различными данными. Возможны два способа передачи данных в КФ: а) с помощью списка параметров, б) с помощью глобальных переменных.
При использовании первого способа в тексте КФ используются формальные параметры, имеющие имена %0…%9. Реальные значения этим параметрам присваиваются с помощью фактических параметров, задаваемых при запуске КФ через пробелы:
<имя КФ> <параметр1> <параметр2> .. <параметр9>
При выполнении КФ формальный параметр %1 получает значение <параметр1>, формальный параметр %2 получает значение <параметр2> и т.д. В формальном параметре %0 хранится имя КФ.
Операционная система Windows позволяет создавать КФ, у которых число фактических параметров превышает 10. Для этого необходимо воспользоваться командой SHIFT. Символ “%” можно использовать в командах внутри КФ. Для этого необходимо в тексте КФ повторить его дважды. Например, имя файла f%.exe должно выглядеть как f%%.exe.
При использовании второго способа (глобальных переменных) перед запуском КФ в области окружения ОС с помощью команды SET необходимо создать глобальные переменные и присвоить им заданные значения. Имена этих переменных при использовании в командах КФ заключаются в символы “%” (например, %FILE%). При выполнении КФ операционная система извлекает соответствующие значения переменных из области окружения.
Порядок выполнения работы
Все задания выполняются из командных файлов.
|