Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS-Lab-Part-II _Ruda1.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
767 Кб
Скачать
☆
  1. Задание 5.3. Утилита For

Утилита For командной среды предназначена для выполнения циклических операций для заданного множества операндов.

Синтаксис команды For:

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

где параметр:

%переменная - любые символы, кроме цифр 0–9 используется для выполнения команды из строки в окне командной оболочки;

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

(множество) — обязательный параметр, задающий один или группу файлов, каталогов, диапазон значений или текстовых строк, указывающих на файлы, подлежащие обработке заданной командой. Например, допустимыми являются следующие варианты: (*.doc), (*.doc *.txt *.me), (jan*.doc jan*.rpt feb*.doc feb*.rpt), (ar??1991.* ap??1991.*). Скобки являются обязательными для обозначения множества.

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

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

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

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

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

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

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

For /L {% | %%} переменная in (НачальноеЗначение#,шаг#, КонечноеЗначение#) do команда [ПараметрыКоманднойСтроки]

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

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

FOR /F ["options"] %variable IN ("literal string") DO command [command-parameters]

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

или, если использован параметр usebackq:

FOR /F ["options"] %variable IN (filenameset) DO command [command-parameters]

FOR /F ["options"] %variable IN ('literal string') DO command [command-parameters]

FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]

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

eol=c - определение символа комментариев в конце строки (допускается задание только одного символа).

skip=n - число пропускаемых при обработке строк в начале файла.

delims=xxx - определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции.

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

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

Поясняющий пример: FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

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

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

Переменная %i явно описана в инструкции for, а переменные %j и %k описываются неявно с помощью ключа tokens=. Ключ tokens= позволяет извлечь из одной строки файла до 26 подстрок, при этом, не допускается использование переменных больших чем буквы 'z' или 'Z'. Следует помнить, что имена переменных FOR являются глобальными, поэтому одновременно не может быть активно более 52 переменных.

Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.

Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:

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

выведет перечень имен всех переменных среды, определенных в настоящее время в системе.

Операции подстановки ссылок на переменные команды FOR также расширены. Допускается применение следующих синтаксических конструкций:

%~I - из переменной %I удаляются обрамляющие кавычки (")

%~fI - переменная %I расширяется до полного имени файла

%~dI - из переменной %I выделяется только имя диска

%~pI - из переменной %I выделяется только путь к файлу

%~nI - из переменной %I выделяется только имя файла

%~xI - из переменной %I выделяется расширение имени файла

%~sI - полученный путь содержит только короткие имена

%~aI - переменная %I расширяется до атрибутов файла

%~tI - переменная %I расширяется до даты /времени файла

%~zI - переменная %I расширяется до размера файла

%~$PATH:I - проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %I заменяется на полное имя первого найденного файла. Если переменная PATH не определена или в результате поиска не найден ни один файл, то этот модификатор заменяется на пустую строку

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

%~dpI - переменная %I заменяется только на имя диска и путь

%~nxI - переменная %I заменяется только на имя файла и его расширение

%~fsI - переменная %I заменяется только на полный путь с краткими именами

%~dp$PATH:I - проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %I заменяется на имя диска и путь к первому найденному файлу.

%~ftzaI - переменная %I заменяется на строку, выдаваемую командой DIR

В приведенных выше примерах переменные %I и PATH можно заменить на любые другие допустимые значения. В таких синтаксических конструкциях за символами %~ может следовать любое имя переменной цикла FOR.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]