Организация в пакетных файлах проверки условий и циклов



Лабораторная работа №3

Использование параметров командной строки и условного выполнения команд

 

Цель: Овладеть навыками работы с командными файлами в ОС Windows, научиться работать с параметрами командной строки и циклами и условным выполнением команд.

Общие положения

Пакетные (командные) файлы, также называемые программами пакетной обработки или сценариями, позволяют упростить выполнение утомительных и часто используемых операций. Еще в операционной системе MS-DOS появилась возможность записывать нужную для этого последовательность команд операционной системы в специальный файл, называемый командным файлом и имеющий расширение .BAT. Пакетный файл в Windows  /  представляет собой неформатированный текстовый файл, содержащий одну или несколько команд и имеющий расширение имени .batили .cmd.Когда имя такого файла вводится в командной строке (расширение можно не указывать), программа Cmd.exe выполняет по порядку команды, записанные в файле.

В пакетный файл можно включить любую команду. Некоторые команды, такие как for, goto и if, позволяют выполнять обработку условий в пакетных файлах. Например, if позволяет запускать команды в зависимости от выполнения заданного условия. Другие команды позволяют управлять вводом и выводом, а также запускать другие пакетные файлы.

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

Прервать выполнение командного файла можно с помощью комбинации Ctrl+C илиCtrl+Break. В командном файле можно вызывать другой командный файл, указав его имя и, если надо, параметры. Но после окончания работы вызванного файла выполнение исходного командного файла продолжено не будет. Если нужно продолжить выполнение после выполнения вложенного файла, можно воспользоваться командой CALL.

 

При описании синтаксиса команд будут использоваться следующие обозначения:

Формат Значение
Курсив Данные, которые должен ввести пользователь
Полужирный шрифт Элементы, которые следует вводить точно, как показано
Пропуск (...) Параметры могут повторяться несколько раз в командной строке
В квадратных скобках ([]) Необязательные элементы
В фигурных скобках ({}); варианты разделены вертикальной чертой (|). Пример: {четные|нечетные} Набор значений, из которого можно выбрать только одно значение
Шрифт Courier Текст кода или выхода программы

 

 

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

Команда Echo

Вывод на экран сообщения или задание режима вывода на экран сообщений команд. Вызванная без параметров команда echo выводит текущий режим.

Синтаксис

echo [{on|off}] [сообщение]

Параметры

{on|off} - Включение или отключения режима отображения на экране информации о работе команд.

сообщение - текст для вывода на экран.

Примечания

· Команда echo сообщение может оказаться полезной, если отключен режим отображения работы команд. Для вывода сообщений из нескольких строк без вывода дополнительных команд между ними следует использовать несколько последовательных команд echo сообщение после команды echo off в пакетной программе.

· Если используется команда echo off, приглашение командной строки не отображается на экране. Чтобы отобразить приглашение, введите команду echo on.

· Чтобы отключить вывод строк, введите символ «коммерческого эт» (@) перед командой в пакетном файле.

· Чтобы вывести на экране пустую строку, введите следующую команду:  

· echo.

· Если требуется отключить режим отображения команд и при этом не выводить на экран строку самой команды echo, введите символ @ перед командой:

@echo off

 

Команда Goto

В пакетной программе передает управление Windows  в строку, определенную меткой. Когда метка найдена, выполнение продолжается со следующей за ней строки.

Синтаксис

goto метка

Параметры

метка -Строка в пакетной программе, к которой выполняется переход.

 

· Работа с расширениями командыgoto

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

· Использование допустимых значений метки

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

· Совпадение меток в пакетных программах

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

Метка не найдена.

 

Команда Pause

Приостанавливает выполнение пакетной программы с выводом сообщения об ожидании нажатия пользователем любой клавиши.

Синтаксис

Pause

Примечания

· При запуске команды prompt выводится следующее сообщение:

Для продолжения нажмите любую клавишу . . .

· Если при работе пакетной программы была нажата комбинация CTRL+C для ее остановки, то на экран будет выведено следующее сообщение:

Завершить выполнение пакетного файла [Y(да)/N(нет)]?

Если была нажата клавиша Y (подтверждение), пакетная программа будет закончена и управление вернется операционной системе. По этой причине команда pause может быть вставлена перед разделом пакетного файла, который потребуется пропустить. Команда pause приостанавливает выполнение пакетной программы, аналогичное действие можно сделать, нажав комбинацию CTRL+C и Y.

 

Команда Rem

Добавляет комментарии в пакетные файлы или файлы настройки.

Синтаксис

rem[текст]

Параметры

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

· Вывод комментариев на экран с помощью команды echo

Команда rem не выводит комментарии на экран. Для вывода комментариев на экран необходимо использовать команду echo on в пакетных файлах или в файле Config.nt.

 

Параметры командных файлов

Командным файлам из командной строки могут быть переданы аргументы. Аргументы задаются параметрами командной строки после имени файла. Файл Cmd.exe использует переменные с %0 по %9. При использовании пакетных параметров переменная %0 заменяется на имя пакетного файла, а переменные с %1 по %9 — на соответствующие аргументы, напечатанные в командной строке. Для доступа к переменным больше %9 используется команда shift. Параметр %* ссылается на все аргументы, которые передаются пакетному файлу, за исключением параметра %0.

Команда Shift

Изменяет положения пакетных параметров в пакетных файлах.

Синтаксис

Shift

Параметры отсутствуют

· Использование параметра командной строки shift с расширениями командного процессора

Если расширения командного процессора разрешены (используются по умолчанию), команда shift поддерживает ключ /n, который указывает команде начинать сдвиг с n-го аргумента, где n — число от нуля до восьми. Например:

SHIFT /2

сдвинет %3 на %2, %4 на %3 и т. д. %0 и %1 останутся неизменными.

· Работа команды shift

Команда shift изменяет значения замещаемых параметров %0 - %9 путем копирования каждого параметра в предыдущий. Другими словами, значение %1 копируется в %0, значение %2 — в %1 и т. д. Такой прием оказывается полезным при написании пакетных файлов, выполняющих одну и ту же операцию над любым числом параметров.

· Работа более чем с 10 пакетными параметрами

Команда shiftтакже может быть использована для создания пакетных программ, воспринимающих более 10 параметров. В командной строке такой программы можно задать более 10-ти параметров, при этом все параметры, следующие за десятым (то есть за переменной%9) будут последовательно помещены в эту переменную %9.

· Использование %* с командой shift

Команда shift не влияет на пакетный параметр %*.

· Смещение параметров в обратном направлении

Команды, выполняющей обратный сдвигне существует. После сдвига параметров командой shift начальное значение первого параметра (%0) не может быть восстановлено.

Команда Call

Вызов одного пакетного файла из другого без завершения выполнения первого файла. Команда call принимает метки в качестве объекта вызова. Используемая в командной строке, а не в сценарии или пакетном файле, команда Call игнорируется.

Синтаксис

call [[диск:][путь] имя_файла [пакетные_параметры]] [:метка [аргументы]]

Параметры

[диск:][путь] имя_файла - задает имя и местоположение пакетного файла для запуска. Параметр имя_файла должен иметь расширение .bat или .cmd.

пакетные_параметры - задает данные командной строки, используемые программой пакетной обработки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %0 до %9) или переменные (например %baud%).

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

 аргументы - задает данные командной строки, которые передаются в новый экземпляр программы пакетной обработки, начинающейся с :метки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %1 до %9) или переменные (например %baud%).

Пример

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

Call checknew

Если родительская пакетная программа принимает два пакетных параметра и требуется передать их в файл Checknew.bat, включите следующую команду в родительскую пакетную программу:

call checknew %1 %2

 

Организация в пакетных файлах проверки условий и циклов

Команда If

Обработка условий в пакетных программах.

Синтаксис

if [not] errorlevel число команда [else выражение]

if [not] строка1==строка2 команда [else выражение]

if [not] existимя_файла команда [else выражение]

Параметры

not - задает выполнение команды только в случае невыполнения условия.

errorlevel число - условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа.

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

строка1==строка2 - условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1). Явно заданные строки нет необходимости заключать в кавычки.

exist имя_файла - условие выполняется, если существует файл с именем имя_файла.

оп_сравнения - трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения.

Оператор Описание
EQU равно
NEQ не равно
LSS меньше
LEQ меньше или равно
GTR больше
GEQ больше или равно

Если расширения командного процессора разрешены, следует использовать также следующий синтаксис:

if [/i] строка1 оп_сравнения строка2 команда [else выражение]

if cmdextversion число команда [else выражение]

if defined переменная команда [else выражение]

Параметры

/i  - сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1==string2 команды if. Эти сравнения являются общими. Если и строка1, и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел.

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

defined переменная - условие выполняется, если переменная определена.

выражение - команда и все ее параметры для обработке в командной строке при выполнении оператора else.

 

· Если условие, заданное в команде if, выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if, пропускается, а управление переходит к команде оператора else, если она задана.

· Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.

· Использование команды defined переменная

При использовании команды defined переменная добавляются следующие три переменные: %errorlevel%, %cmdcmdline% и %cmdextversion%.

%errorlevel% замещается строковым представлением текущего значения errorlevel, если только уже не существует переменная среды с именем ERRORLEVEL. В этом случае будет использовано ее значение.

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

goto answer%errorlevel%

:answer0

echo Код возврата программы равен 0

:answer1

echo Код возврата программы равен 1

goto end

:end

echo Готово!

Операторы сравнения оп_сравнения также можно использовать следующим образом:

if %errorlevel% LEQ 1 goto okay

%cmdcmdline% замещается исходной командной строкой, переданной Cmd.exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline. В этом случае будет использовано значение cmdcmdline.

%cmdextversion% замещается строковым представлением текущего значения cmdextversion, если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.

· Использование оператора else

Оператор else должен размещаться в той же строке, что и команда if.

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

IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. отсутствует

Примеры

Если файл Product.dat не удается найти, появится следующее сообщение:

if not exist product.dat echo Не найден файл данных

Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:

if exist c:mydir\nul goto process

Оператор if и команду echo можно использовать в одной командной строке: Например:

if exist *.rpt echo Отчет получен.

 

Команда For

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

Синтаксис

for {%переменная|%%переменная} in (множество) doкоманда [ПараметрыКоманднойСтроки]

Параметры

{%переменная|%%переменная} - обязательный параметр. Замещаемый параметр. Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. Переменные учитывают регистр и могут быть представлены со значением альфа, например, %A, %B или %C.

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

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

ПараметрыКоманднойСтроки - задает параметры командной строки, которые используются с указанной командой.

 

· Использование программы for

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

· Использование параметров командной строки пакетного файла

Перечисленные ниже атрибуты применяются к команде for.

· В команде for переменная %%переменная (или %%переменная) будет заменяться текстовой строкой из заданного параметра множество, пока параметр команда не обработает все файлы этого множества.

· Имена параметров переменная команды for учитывают регистр буквы, они являются глобальными и одновременно может быть активно не больше 52 переменных.

· Для обозначения параметра переменная можно использовать любые символы, кроме цифр 0–9, чтобы не было конфликта с параметрами пакетных файлов %0%9. Для простых пакетных файлов вполне достаточно обозначений с одним символом, например %%f.

· Задание множества файлов

Параметр множество может представлять группу файлов или несколько групп файлов. Для задания групп файлов можно использовать подстановочные знаки (* и ?). Следующие множества файлов являются допустимыми:

(*.doc)

(*.doc *.txt *.me)

(jan*.doc jan*.rpt feb*.doc feb*.rpt)

(ar??1991.* ap??1991.*)

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

· Использование ключевых слов in и do

· In и do не являются параметрами, но они требуются для работы команды for. Если какое-то из слов пропущено, на экран будет выведено сообщение об ошибке.

· Использование дополнительных форм команды for

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

· Только каталоги

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

for /D {%% | %}переменная in (множество) doкоманда [ПараметрыКоманднойСтроки]

· Рекурсивная

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

for /R [[диск :]путь] {%% | %}переменная in (множество) doкоманда [ПараметрыКоманднойСтроки]

Дополнительную информацию по команде forможно получить с помощью справки.

 

Практическое задание

2.1. Запустите консоль командной строки.

2.2. Создайте пакетный файл, выполнив команду copyили с помощью файлового менеджера (Far, Total Commander).Имя файла задайте сами, расширение его должно быть .bat или .cmd,например My.bat. Наберите текст пакетного файла, выводящего сообщение из трех строк на экран с пустыми строками до и после него:

echo off

echo.

echo Hello!

echo Hello again!

echo Command echo

echo.

2.3. Сохраните файл - нажмите Ctrl+Z.

2.4. Запустите файл на выполнение, набрав в командной строке его имя.

2.5. Рассмотрим использование команд rem, pause, goto и меток. В этом примере все файлы с диска h: копируются в текущий каталог. После этого на экран выводится запрос вставить другой диск, затем команда pause приостанавливает работу программы, чтобы пользователь мог сменить диск и нажать любую клавишу для продолжения процесса. Данная пакетная программа работает как бесконечный цикл. Команда goto begin возвращает управление на начало командного файла. Для завершения работы этой пакетной программы требуется нажать комбинацию CTRL+C и Y. Проанализируйте  пакетный файл, приведенный ниже:

@echo off

rem It is comment!

:begin

copy h:*.*

echo Please put a new disk

pause

goto begin

2.6. Рассмотрим использование параметров командной строки. Создадим файл для копирования содержимого одной папки в другую. Каждый раз, запуская файл, мы можем задавать новые папку-источник и папку-приемник.  Например, для копирования содержимого из папки Folder1 в папку Folder2, где параметр %1 заменяется на значение Folder1, а параметр %2 — на значение Folder2. Новый файл будет состоять из одной строки:

xcopy %1\*.* %2

 

2.7. Если мы сохраним его под именем my3.cmd, то для  запуска файла нужно ввести:

my3.cmd C:\folder1 D:\folder2

Результат будет таким же, как и при записи в пакетный файл строки:

xcopy C:\folder1 \*.* D:\folder2

Выполните запуск данного файла, указав реальные параметры, и убедитесь в правильности его работы.

2.8. Рассмотрим использование команд shift,  ifи собственные переменные окружения.

В следующем пакетном файле Mycopy.bat показано, как использовать команду shift с произвольным числом пакетных параметров. Файл копирует набор файлов в заданный каталог. Пакетные параметры представлены аргументами имени файла и каталога. Для фиксации значения первого параметра используется собственная переменная todir.

MYCOPY.BAT копирует произвольное число файлов в задаваемый при запуске каталог.Используется следующий синтаксис:mycopy каталог файл1 файл2 ...

 

Создайте следующий пакетный файл:@echo offset todir=%1:getfileshiftif "%1"=="" goto endcopy %1 %todir%goto getfile:endset todir=echo EXIT!

 

Можно также использовать в команде shift ключ /n, который указывает команде начинать сдвиг с n-го аргумента, где n — число от нуля до восьми. При использовании shift /2 нет необходимости использовать переменную todir. Например:


Дата добавления: 2018-04-05; просмотров: 742; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!