Команды, используемые в командных файлах

Цель работы

 

Целью работы является приобретение навыков работы с командными файлами в Windows, позволяющими выполнять последовательности команд.

 

Состав рабочего места

 

2.1. Оборудование: IBM-совместимый персональный компьютер (ПК).

2.2. Программное обеспечение: операционная система Windows .

 

 

Подготовка к выполнению лабораторной работы

 

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

1. Пользовательский интерфейс командной строки Windows.

2. Командные файлы.

 

4. Краткие теоретические сведения (занятие 1)

Командные файлы

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

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

Поскольку командный файл выполняется в режиме командной строки, он должен быть задан в кодировке OEM. Набор текста командного файла в этой кодировке выполняется либо в текстовом редакторе Блокнот при задании в команде Шрифт меню Формат шрифта Terminal, либо в любом другом редакторе, поддерживающем кодировку OEM (например, редакторе Bred3).

Вызов командного файла

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

При вызове командного файла может быть задано до 9 параметров (число параметров может быть увеличено при использовании команды shift). В самом командном файле эти параметры обозначаются символами %1 - %9. При выполнении командного файла эти символы будут заменены значениями параметров с соответствующими номерами. Если в командной строке при вызове командного файла задано меньше девяти параметров, то «лишние» символы из %1 - %9 замещаются пустыми строками.

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

Параметры при вызове команд могут отделяться между собой либо пробелами, либо запятой (символ ","), либо точкой с запятой (символ ";").

Параметры не могут принимать следующих значений: &, | или символы ( и ). Чтобы задать эти значения в качестве параметров, их необходимо либо заключить в двойные кавычки, либо задать перед ними символ ^.

В командном файле можно использовать также символы %0, значение которых – полный путь к командному файлу командного файла, а также символы %* – список параметров командного файла.

Для выполнения командного файла операционная система вызывает команду cmd – интерпретатор команд.

Если в командном файле символ % используется не для обозначения параметров, а для других целей (например, как часть имени файла), то его надо набрать дважды. Так, чтобы в командном файле указать файл XYZ%.COM, надо написать в строке командного файла XYZ%%.СОМ.

С символами %0-%9 (%номер-параметра) можно также использовать следующие основные модификаторы:

· %~номер-параметра – расширение %номер-параметра и удаление апострофов("");

· %~fномер-параметра – параметр рассматривается как имя файла и %номер-параметра заменяется полным путем к этому файлу;

· %~pномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется путем к папке, в которой находится этот файл;

· %~dномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется именем диска, на котором находится этот файл;

· %~nномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется его именем (без указания пути);

· %~xномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется его расширением (с предшествующим символом ".");

· %~tномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется датой и временем модификации файла;

· %~zномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется значением размера файла (в байтах);

· %~dpномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется его именем и путем;

· %~nxномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется его именем и расширением;

· %~ftzномер-параметра – параметр рассматривается как имя файла и, если файл с указанным именем существует, %номер-параметра заменяется его характеристиками (аналогично выводу команды dir).

Команды, используемые в командных файлах

4.3.1. Команда echo и префикс @

Команда echo используется в двух случаях:

· для управления выводом строк файла;

· для вывода сообщений на экран дисплея.

Так, команда echo offотменяет вывод на экран следующих за ней команд, а команда echo on – включает режим вывода выполняемых команд на экран. Команда echo строка, где строка не символы "on" или "off" выводит указанную строку на экран во время выполнения командного файла, даже если режим вывода на экран выключен с помощью предыдущей команды echo off.

Префикс "@" в начале строки отменяет вывод на экран только данной строки.

Команда cls

Командаcls очищает экран дисплея. Эта команда задается без параметров.

Команда rem

Команда

rem строка

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

Команда color

Команда color устанавливает цвет текста и фона окна вывода командного файла и имеет следующий синтаксис

color фт

где ф – шестнадцатеричная цифра, задающая цвет фона, а т – шестнадцатеричная цифра, задающая цвет текста.

Для цветов определены следующие значения:

 

 

Код Цвет Код Цвет
Черный; Серый;
Синий; Светло-синий;
Зеленый; A Светло-зеленый;
Голубой; B Светло-голубой;
Красный; C Светло-красный;
Сиреневый; D Светло-сиреневый;
Желтый; E Светло-желтый;
Белый; F Ярко-белый.

Команда color без параметров восстанавливает цвета по умолчанию.

Команды pushd и popd

Команда

pushd имя-папки

сохраняет имя текущей папки и делает текущей папку с заданным именем (для этой папки может быть указан как абсолютный, так и относительный путь).

Команда

popd

делает текущей папку, сохраненную командой pushd.

Метки и команда goto

Любая строка командного файла, начинающаяся с префикса ":", воспринимается при обработке командного файла как метка. Имя метки определяется набором символов, следующих за двоеточием до первого пробела или конца строки. Команда перехода

goto метка

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

Команда if

Команда условного перехода if, имеет формат:

if условие команда

Эта команда позволяет в зависимости от истинности или ложности заданного условия соответственно выполнять или не выполнять указанную команду.

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

· errorlevel число – условие истинно тогда, когда код завершения предыдущей выполненной программы или команды больше заданного числа или равен ему (код завершения устанавливается программами при окончании их работы, по умолчанию этот код равен нулю);

· строка-1 == строка-2 – условие истинно тогда, когда строка-1 и строка-2 полностью совпадают. Если в этих строках имеются символы %0 - %9, то вместо этих символов подставляются параметры командного файла;

· exist имя-файла – условие истинно тогда, когда указанный файл существует;

· not условие – истинно тогда, когда указанное условие ложно.

Команда – это любая допустимая команда (в том числе goto).

В Windows XP введена более удобная расширенная команда if, которая имеет следующий синтаксис:

if [/i] условие (

команда-1-1

команда-1-2

) else (

команда-2-1

команда-2-2

)

Часть команды if, начиная с команды else, может быть пропущена.

В условии сравнения двух строк в расширенной команде if можно вместо символов "==" использовать следующие трехсимвольные сокращения операций сравнения:

· EQU – равно;

· NEQ – не равно;

· LSS – меньше;

· LEQ – меньше или равно;

· GTR – больше;

· GEQ – больше или равно.

Сравнение строк выполняется следующим образом: если все символы в строках равны, строки считаются равными. Если код первый неравный символ первой строки, больше, чем код первого неравного символа второй строки, то первая строка считается больше, чем вторая. В противном случае первая строка меньше второй. Например, строка abc меньше строки abd, но больше строки abb. Если обе строки состоят из цифр, то они сравниваются как числа.

Сравнение строк выполняется без учета регистра букв (заглавные и строчные буквы считаются одинаковыми). Для учета регистра букв необходимо задать опцию /i.

Для расширенной команды if могут быть также заданы дополнительные условия cmdextversion и defined.

Условие

cmdextversion число

выполняется, только если номер внутренней версии, связанный с расширениями командного процессора cmd.exe, равен или больше числа. Первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены).

Условие

defined переменная

выполняется, если переменная определена (обычно это переменная окружения).

Команда find

Команда find выполняет поиск заданной строки текста в файле или нескольких файлах. Команда имеет следующий синтаксис:

find [/v] [/c] [/n] [/i] "строка-поиска" [[диск:][путь]имя-файла[...]]

Обязательный параметр "строка-поиска" задает последовательность символов, для которой будет производиться поиск. Параметр [[диск:][путь]имя-файла[...]] задает путь к файлу. Если этот параметр не указан, данные берутся из стандартного ввода команды.

Опции команды find действуют следующим образом:

· /v – выводит все строки, не содержащие строку, заданную параметром "строка-поиска" (если эта опция не задана, выводятся все строки, содержащие строку "строка-поиска");

· /c – вывод количества строк, содержащих строку поиска;

· /n – вывод номеров строк перед строками;

· /i– поиск без различия строчных и заглавных букв.

Команда findstr

Команда findstr также выполняет поиск заданной строки текста в файле или нескольких файлах, однако обладает большими возможностями по сравнению с командой find.

Команда findstr имеет следующий синтаксис:

findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/offline] [/g:файл] [/f:файл] [/c:строка] [/d:список-папок] [/a:атрибут-цвета] [строка] [[диск:][путь] имя-файла [...]]

Параметр строка – задает строку (шаблон), поиск которой производится в файле, заданном параметром [диск:][путь] имя-файла. Если параметр содержит пробелы, он должен быть заключен в апострофы ("). Параметров [диск:][путь] имя-файла может быть задано несколько (в этом случае поиск производится во всех заданных файлах.

Для команды findstr определены следующие опции:

· /b – сравнивает шаблон с началом строки;

· /e – сравнивает шаблон с концом строки.

· /r – использует строку поиска как регулярное выражение, в котором некоторые символы интерпретирует как метасимволы (см. ниже);

· /l – использует строку поиска как обычную строку, т.е. строку, в которой метасимволы интерпретируются как обычные символы;

· /s – задает поиск файлов в текущей папке и содержащихся в ней папках;

· /i – задает поиск без различия строчных и заглавных букв;

· /x – выводит в выходной поток точно совпавшие строки;

· /v – выводит в выходной поток строки, не содержащие совпадений;

· /n – выводит в начале совпавшей строки ее номер;

· /m – при обнаружении совпадения выводит только имя файла;

· /o – выводит смещение перед выводом строки с совпадением;

· /p – пропускает файлы с непечатаемыми символами (например, программные файлы);

· /offline – обрабатывает файлы с атрибутом «автономный»;

· /f:файл – читает список из заданного файла;

· /c:строка – использует заданную строку как символьную строку поиска;

· /g:файл – получает строки поиска из заданного файла;

· /d:список-папок – выполняет поиск в списке папок, разделенных запятыми;

· /a:фт – задает атрибуты цвета: ф – для фона и т – для текста двумя шестнадцатеричными цифрами (см. 4.3.4).

Метасимволы – это символы в шаблоне, имеющие специальное значение. В команде findstr можно использовать следующие метасимволы:

· символ . – любой одиночный символ;

· символ * – предшествующий этому символу символ или класс может повторяться 0 или более раз;

· символы .* – любая строка символов;

· символ ^ – поиск в начале строки;

· символ $ – поиск в конце строки;

· [класс] – любой символ из множества класс;

· [^класс] – любой символ, не заданный во множестве класс;

· [символ1-символ2] – любой символ в диапазоне от символ1 до символ2;

· \>строка – строка поиска, находящаяся в начале слова;

· строка\> – строка поиска, находящаяся в конце слова;

· \метасимвол – метасимвол (., *, ^, $, [ или \) трактуется как обычный символ.

В строке поиска можно задать несколько строк, разделенных пробелами. В этом случае достаточно, чтобы хотя бы одна из этих строк присутствовала в просматриваемой строке. Однако, если строка поиска задана в опции /c, то выполняется поиск на совпадение всех символов строки.

Команда sort

Команда sort сортирует поступающие на ее вход данные и имеет следующий синтаксис:

sort [/r] [/+индекс] [/m килобайты] [/l язык] [/rec символы]

[[диск1:][путь1]имя-файла1] [/t [диск2:][путь2]]

[/o [диск3:][путь3]имя-файла3]

Параметр [диск1:][путь1]имя-файла1 задает сортируемый файл. Если этот параметр не задан, сортируется стандартный ввод.

Параметр [/t [диск2:][путь2]] задает каталог для хранения рабочих данных команды sort, если сортируемые данные не помещаются в основной памяти (по умолчанию используется системный временный каталог).

Параметр /o [диск3:][путь3]имя-файла3 задает файл для хранения отсортированного ввода (если параметр не указан, данные будут записываться в стандартный вывод).

Для команды sort определены следующие опции:

· /r – изменяет порядок сортировки по уменьшению, т.е. от Z к A, затем от 9 к 0;

· /+индекс – задает номер позиции символа индекс, начиная с которой будет выполняться сравнение (по умолчанию сравнение начинается с первого символа в строке, т.е. значение индекса по умолчанию равно 1);

· /m килобайты – задает количество основной памяти, используемой для сортировки (в килобайтах);

· /l язык – переопределяет порядок сортировки символов, задаваемый языком, который используется системой по умолчанию, т. е. языком и страной/регионом, выбранными при установке (в настоящее время единственно допустимое значение параметра язык – C, когда сортировка символов производится по их двоичной кодировке);

· /rec символы – задает максимальное числа символов в записи (или строке) входного файла (значение по умолчанию равно 4096, максимальное значение — 65535).

При сортировке регистр букв не учитывается, т.е. строчные и заглавные буквы, например, А и а, считаются одинаковыми символами.

Команда for

Команда for выполняет некоторую команду или последовательность команд для каждого файла из заданного множества.

Команда имеет следующий синтаксис:

for переменная in (множество) do команда

Переменная обычно используется в команде и при выполнении команды последовательно принимает имена файлов из заданного множества. Если переменная задается вне командного файла, она должна начинаться с символа %, если внутри командного файла – должна начинаться с символов %%.

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

Команда это отдельная команда или последовательность команд. Последовательность команд должна быть задана, как это описано в 2.1.14.3.

В командах или последовательностях команд для переменных можно задавать те же модификаторы, что определены для параметров вызова командного файла (см. 4.1).

Следует отметить, что все компоненты команды for, включая команды после оператора do, должны задаваться в одной строке.

Первая расширенная форма команды for:

for /D переменная in (множество) do команда

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

Вторая расширенная форма команды:

for /R [[диск:]путь] переменная in (множество) do команда

проходит по дереву папок с корнем в [диск:]путь, выполняя команду for для каждой папки в дереве. Если папка после опции /R не задана, предполагается текущая папка. Если параметр множество задан одной точкой (.), то команда просто выводит список папок в дереве.

Третья расширенная форма команды for:

for /L переменная in (начальное-значение, шаг, конечное-значение)

do команда

выполняет цикл по заданному диапазону целых чисел начального-значения от до конечного-значения с приращением (положительным или отрицательным целым числом), заданным в параметре шаг.

Последняя расширенная форма команды for может быть задана в одном из трех вариантов:

for /F ["параметры-разбора"] переменная in (множество) do команда

for /F ["параметры-разбора"] переменная in ("строка") do команда

for /F ["параметры-разбора"] переменная in ('команда') do команда

Эти варианты расширения разбивают текст файла в параметре множество, либо строку в параметре "строка", либо вывод команды в параметре 'команда' на отдельные смысловые элементы – лексемы. Разделителями между лексемами являются один или несколько символов-ограничителей. Параметры-разбора содержат список параметров, отделенных друг от друга пробелом или пробелами.

Лексемы образуют последовательность. С каждым из элементов этой последовательности можно связать свой индекс. Первый индекс, например, %%I задается как значения переменной в команде for. Остальные лексемы будут доступны с индексами %%J (вторая лексема), %%K (третья лексема) и т.д. По умолчанию для анализа доступна только первая лексема. Чтобы сделать остальные лексемы доступными для анализа, необходимо в параметрах-разбора задать ключевой параметр

tokens=список

Список задает номера лексем, доступные для анализа, либо в виде списка номеров лексем, отделенных друг от друга запятыми (например, 1,2,3), либо в виде диапазона значений (например, 1-4). Если в конце списка задан символ "*", то создается дополнительная переменная, Значением которой будут все оставшиеся лексемы. Например, если задан параметр

tokens=1,2*,

то в качестве значения переменной %%I будет доступна первая лексема, в качестве значения переменной %%J – вторая лексема и в качестве значения переменной %%K – третья и последующая лексема.

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

delims=символы

Так, чтобы задать в качестве символов-разделителей запятую, точку с запятой и точку, необходимо задать следующий параметр:

delims=,;.

Если необходимо задать в качестве символа-разделителя пробел, параметр должен быть последним в списке параметров-разбора, а символ пробела – последним в списке символов-разделителей, например:

"tokens=1,2* delims=,;. ".

Ключевой параметр

skip=число

в списке параметров-разбора задает количество строк, пропускаемых без анализа в начале файла, а параметр

eol=символ

позволяет исключить из анализа строку, первым символом которой является заданный символ.

Последний параметр в списке параметров-разбора:

usebackq,

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

for /F ["usebackq параметры-разбора"] переменная

in ("множество") do команда

for /F ["usebackq параметры-разбора"] переменная

in ('строка') do команда

for /F ["usebackq параметры-разбора"] переменная

in (`команда`) do команда

Команда set

Команда set задает, удаляет и просматривает переменные окружения, а также позволяет вводить строковые переменные, задавать числовые переменные и выполнять операции над ними.

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

Для задания переменной окружения используется следующая форма команды set:

set имя-переменной=значение

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

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

Для удаления переменной окружения используется следующая форма команды set:

set имя-переменной=

 

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

· %CD% – возвращает путь к текущей папке;

· %DATE% и %TIME% – возвращают текущую дату и время;

· %ERRORLEVEL% – возвращает код ошибки последней использовавшейся команды;

· %OS% – возвращает имя операционной системы;

· %PATH% – возвращает пути поиска исполняемых файлов (программ);

· %PROMPT% – возвращает параметры командной строки для текущего интерпретатора;

· %RANDOM% – возвращает десятичное целое случайное число в диапазоне от 0 до 32767;

· %SYSTEMDRIVE% – возвращает имя диска, содержащего корневой каталог Windows;

· %SYSTEMROOT% – возвращает путь к системному каталогу Windows;

· %USERNAME% – возвращает имя пользователя.

 

Для ввода строки используется форма команды set с опцией /p:

set /p имя-переменной=

Эта команда приостанавливает выполнение командного файла и ожидает ввода строки с клавиатуры и нажатия клавиши Enter. После этого значение введенной строки присваивается переменной с заданным именем.

 

Для операций над числовыми выражениями используется форма команды set с опцией /a:

set /a выражение

В выражении могут быть заданы следующие арифметические и логические операции:

· +, -, * и / – арифметические операции сложения, вычитания, умножения и деления;

· % – операция определения остатка от деления двух целых чисел;

· число<<сдвигчисло рассматривается как представленное в двоичном виде и его биты сдвигаются влево на количество позиций, указанных в параметре сдвиг (освободившиеся биты заполняются нулями);

· число>>сдвигчисло рассматривается как представленное в двоичном виде и его биты сдвигаются вправо на количество позиций, указанных в параметре сдвиг (освободившиеся биты заполняются нулями);

· число1 & число2число1 и число2 рассматриваются как представленные в двоичном виде и над их битами выполняется поразрядное логическое умножение – операция И (соответствующий разряд результата будет равен 1 только тогда, когда оба бита разряда числа1 и числа2 равны 1, в остальных случаях бит равен 0);

· число1 | число2число1 и число2 рассматриваются как представленные в двоичном виде и над их битами выполняется поразрядное логическое сложение – операция ИЛИ (соответствующий разряд результата будет равен 0 только тогда, когда оба бита разряда числа1 и числа2 равны 0, в остальных случаях бит равен 1);

· число1 ^ число2число1 и число2 рассматриваются как представленные в двоичном виде и над их битами выполняется операция исключающее ИЛИ (соответствующий разряд результата будет равен 1 только тогда, когда оба бита разряда числа1 и числа2 не равны друг другу, в остальных случаях бит равен 0);

· = – операция присваивания;

· *=, /=, %=, +=, -=, &=, ^=, |=, <<= и >>= – составные операции присваивания (например, составная операция присваивания x+=3 эквивалентна простой операции присваивания x=x+3);

· , – разделение выражения;

· < > – группировка выражения.