Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Организация циклов c помощью оператора цикла FOR






Для организации циклов в КФ используется оператора FOR, реализующий функции:

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

Цикл FOR … IN … DO … (выполнение команды для каждого элемента множества)

Этот вариант команды FOR для КФ имеет вид:

FOR %%переменная IN (множество) DO команда [параметры]Параметр множество в команде FOR задает одну или более текстовых строк, которые необходимо обработать с помощью заданной команды. Строки разделяются запятыми Скобки здесь обязательны. Параметр команда [параметры] задает команду, выполняемую для каждого элемента множества, при этом вложенность команд FOR на одной строке не допускается.

Параметр %% переменная представляет параметр цикла, в качестве которого могут использоваться имена переменных, состоящие из одной буквы. Цифры использовать нельзя. При выполнении КФ в примере 6 команда FOR заменяет подставляемую переменную текстом каждой строки в заданном множестве.

Пример 6. Вывод нескольких строк

FOR %%i IN (one, two) DO ECHO %%i

В результате выполнения КФ примера 6 на экран будут выведены две строки:

onetwo

Параметр множество в команде FOR может также представлять одну или несколько групп файлов. Например, чтобы вывести на экран список всех файлов с расширениями txt или cmd, находящихся в каталоге C: \TEXT, без использования команды DIR, можно использовать сценарий следующего содержания:

FOR %%f IN (C: \TEXT\*.txt C: \TEXT\*.cmd) DO ECHO %%f > > list.txt

Цикл FOR /D … IN … DO … (выполнение команды для подкаталогов)

Данный вариант команды FOR реализуется с помощью ключа /D:

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

В случае, если набор содержит подстановочные знаки, то команда выполняется для всех подходящих имен каталогов. Например, в результате выполнения сценария

FOR /D %%d IN (C: \*.*) DO ECHO %%d

будет получен список всех каталогов на диске C:

Цикл FOR /R … IN … DO … (выполнение заданной команды для определенного каталога, а также всех его подкаталогов)

С помощью ключа /R можно задать рекурсию:

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

Заданная команда выполняется для каталога [диск: ]путь, а также для всех подкаталогов этого пути. Если после ключа R не указано имя каталога, то выполнение команды начинается с текущего каталога. Если вместо набора указана только точка (.), то команда проверяет все подкаталоги текущего каталога. Например, если текущим является каталог C: \TEXT с двумя подкаталогами BOOKS и ARTS, то в результате выполнения КФ

FOR /R %%f IN (.) DO ECHO %%fна экран выведутся три строки: C: \TEXT\.C: \TEXT\BOOKS\.C: \TEXT\ARTS\.

Цикл FOR /L … IN … DO … (получение последовательности чисел с заданными началом, концом и шагом приращения)

Ключ /L позволяет реализовать с помощью команды FOR цикл со счетчиком, в этом случае команда имеет следующий: вид:

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

Тройка (начало, шаг, конец) заданная после ключевого слова IN определяет последовательность чисел с заданными началом, концом и шагом приращения, которую можно использовать в арифметических вычислениях. Например, тройка (1, 1, 3) определяет последовательность (1 2 3)

Цикл FOR /F … IN … DO … (чтение и обработка строк из текстового файла)

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

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

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

Таблица 3. Ключи команды FOR /F

Ключ Описание
SKIP=N Число пропускаемых при обработке строк в начале файла
DELIMS=XXX Определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции
TOKENS=X, Y, M-N Определение номеров подстрок, выделяемых из каждой строки файла и передаваемых для выполнения в тело цикла

При использовании ключа TOKENS=X, Y, M-N создаются дополнительные переменные. Формат M-N представляет собой диапазон подстрок с номерами от M до N. Если последний символ в строке TOKENS= является звездочкой, то создается дополнительная переменная, значением которой будет весь текст, оставшийся в строке после обработки последней подстроки.

Пример 7. КФ для разбора текстового файла myfile.txt:

IF NOT EXIST myfile.txt GOTO: NoFileFOR /F " EOL=; TOKENS=2, 3* DELIMS=, " %%i IN (myfile.txt) DO @ECHO %%i %%j %%kGOTO: EOF: NoFileECHO myfile.txt not found!

В примере 7 во второй строке производится проверка наличия файла myfile.txt и при его отсутствии выводится сообщение. Команда FOR в третьей строке обрабатывает файл myfile.txt следующим образом:

¾ пропускаются все строки, которые начинаются с символа точки с запятой (EOL=;);

¾ вторая и третья подстроки из каждой строки передаются в тело цикла, причем подстроки разделяются пробелами (по умолчанию) и/или запятыми (DELIMS=,);

¾ в теле цикла переменная %%i используется для второй подстроки, %%j — для третьей, а %%k получает все оставшиеся подстроки после третьей.

В нашем примере переменная %%i явно описана в инструкции FOR, а переменные %%j и %%k описываются неявно с помощью ключа TOKENS=. Например, если в файле myfile.txt были записаны следующие три строки:

АА BBB CCCC, DDDDDЕ, JJ KKK; TTTT LLLL МММММ

то в результате выполнения КФ на экран будут выведены две строки:

BBB CCCC DDDDDJJ KKK

Замечание 1. Ключ TOKENS= позволяет извлечь из одной строки файла до 26 подстрок, поэтому запрещено использовать имена переменных, начинающиеся не с букв английского алфавита (a–z).

Замечание 2. Имена переменных i, j, k должны следовать в алфавитном порядке.

Замечание 3. Имена параметров цикла FOR являются глобальными, поэтому одновременно не может быть активно более 26 переменных.

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

FOR /F " EOL=; TOKENS=2, 3* DELIMS=, " %%i IN (" AA CC BB, GG DD") DO @ECHO %%i %%j %%k

при своем выполнении выведет

CC BB GG DD

Цикл FOR /F … IN (‘команда’) - (обработка строк вывода команды cmd.exe).

Для обработки строки вывода команды необходимо в скобках ввести строку вызова команды в апострофах. Строка передается для выполнения интерпретатору команд cmd.exe, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующий КФ в примере 8:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.