Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Организация циклов c помощью оператора цикла FOR
Для организации циклов в КФ используется оператора FOR, реализующий функции:
Цикл 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 команда [параметры]В случае, если набор содержит подстановочные знаки, то команда выполняется для всех подходящих имен каталогов. Например, в результате выполнения сценария будет получен список всех каталогов на диске 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
При использовании ключа 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:
|