Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС лабы / ОС - Лабораторная работа 2.doc
Скачиваний:
83
Добавлен:
01.06.2015
Размер:
524.8 Кб
Скачать
    1. Команды для пакетных файлов

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

      1. Вызов одного пакетного файла из другого

CALL [диск:][путь]файл[параметры]

[диск:][путь]файл

Вызываемый пакетный файл

параметры

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

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

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

При вызове создается новый контекст текущего пакетного файла с заданными аргументами (при этом %0заменяется на метку вызова,%1– на первый аргумент вызова и т.д.), и управление передается на инструкцию, расположенную сразу после метки. Для возврата из вызванного пакетного файла необходимо достичь его конца (или вызвать команду “GOTO :EOF”, см. п.2.7.5). При этом управление возвращается на команду, расположенную сразу после строкиCALL, и восстанавливаются значения позиционных параметров.

      1. Вывод сообщений и переключение режима отображения команд на экране

ECHO [ON|OFF]

ECHO [сообщение]

Команда ECHOс параметромON/OFFвключает/выключает режим отображения выполняемых команд пакетного файла.

ECHOбез параметра выдает текущий режим отображения.

ECHOс параметромсообщениевыдает строку сообщения на стандартный вывод.

Другой способ отмены отображения выполняемых команд – использование символа “@” в первой позиции строки. Этот символ отменяет отображение только данной строки. Таким образом, команда “@ECHO OFF” не отображается сама и отменяет отображение следующих за ней команд.

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

      1. Локализация изменений среды в пакетном файле

SETLOCAL

ENDLOCAL

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

      1. Циклическое выполнение указанной команды для набора значений

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

FOR %переменнаяIN(набор)DOкоманда[параметры]

%переменная

Параметр цикла. В пакетных файлах для команды FORиспользуется запись%%переменнаявместо%переменная. Имена переменных учитывают регистр букв (%iотличается от%I)

(набор)

Набор, состоящий из одного или нескольких файлов. Допускается использование символов шаблона

команда

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

параметры

Параметры и ключи для указанной команды

Везде, где в описании синтаксиса требуется “команда”, можно использовать группу команд в круглых скобках, как было описано в п.2.2.2.

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

FOR /D%переменнаяIN(набор)DOкоманда[параметры]

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

FOR /R[[диск:]путь]%переменнаяIN(набор)DOкоманда[параметры]

Выполнение команды для каталога [диск:]путь, а также для всех подкаталогов этого пути. Если после ключа/Rне указано имя каталога, выполнение команды начинается с текущего каталога. Если вместо набора указана только точка “.”, команда выводит список всех подкаталогов.

FOR /L %переменнаяIN(начало,шаг,конец)DOкоманда[параметры]

Это похоже на оператор FORв традиционных языках программирования. Набор раскрывается в последовательность чисел с заданными началом, концом и шагом приращения. Так, набор(1,1,5)раскрывается в (1 2 3 4 5), а набор(5,-1,1)заменяется на (5 4 3 2 1).

FOR /F ["ключи"]%переменнаяIN(набор)DOкоманда[параметры]

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

eol=символ

Определение символа комментариев в конце строки (допускается задание только одного символа)

skip=n

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

delims=xxx

Определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции

tokens=x,y,m-n

Определение номеров подстрок, выделяемых из каждой строки файла и передаваемых для выполнения в тело цикла. При использовании этого ключа создаются дополнительные переменные. Формат “m-n” представляет собой диапазон подстрок с номерами отmпоn. Если последний символ в строке “tokens=” является звездочкой, создается дополнительная переменная, значением которой будет весь оставшийся текст в строке после обработки последней подстроки

Пример.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

Эта команда обрабатывает файл myfile.txt, пропускает все части строк, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная%iиспользуется для второй подстроки,%j– для третьей, а%kполучает все оставшиеся подстроки после третьей. При этом переменная%iявно описана в команде, а переменные%jи%kописываются неявно с помощью ключа “tokens=”.

Команда “FOR /F” позволяет также вместо файла обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла.

Пример.

FOR /F "delims==" %i IN ('set') DO @echo %i

Эта команда выводит перечень имен всех переменных среды, определенных в настоящее время в системе. (Команда SETвыводит список всех переменных с их значениями, по одной переменной в строке, а команда “FOR /F ...” выделяет из каждой строки ее начальную часть до символа “=” и выполняет для нее командуECHO.)