Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Организация циклов с помощью команды FOR




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

– выполнение заданной команды для всех элементов указанного множества;

– выполнение заданной команды для всех подходящих имен файлов;

– выполнение заданной команды для всех подходящих имен каталогов;

– выполнение заданной команды для определенного каталога, а также всех его подкаталогов;

– получение последовательности чисел с заданными началом, концом и шагом приращения;

– чтение и обработка строк из текстового файла;

– обработка строк вывода команды cmd.

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

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

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

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

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

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

В результате выполнения КФ примера 1.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 выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр "ключи" служит для переопределения заданных по умолчанию правил обработки строк. Ключи представляют собой заключенную в кавычки строку, содержащую приведенные в таблице 1.4 ключевые слова.

 

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

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

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

Пример 1.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!

В примере 1.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).

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

Пример 1.8.

ECHO Имена переменных среды:FOR /F "DELIMS==" %%i IN ('SET') DO ECHO %%i

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

В цикле FOR допускается применение функций анализа имен файлов, перечисленных в таблице 1.2. Использование функции ~Z показано в примере 1.9.

Пример 1.9. Вычисление суммарной длины всех файлов в заданном подкаталогеSETLOCAL ENABLEDELAYEDEXPANSIONSET /A Size = 0 FOR %%I IN (%1\*.*) DO SET /A Size= Size + %%~zI

ECHO %Size%





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


Дата добавления: 2018-10-18; Мы поможем в написании ваших работ!; просмотров: 895 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2506 - | 2325 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.