Практическая работа №9 «Организация циклов с использованием ключей /D, /R, / L, /F»
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Цель работы: использование ключей для обработки текстовых файлов в командных файлов

Задачи работы:

1) ознакомиться с назначение ключей /D, /R, / L, /F в операторах цикла;

2) изучить различия использования переменной цикла в бат-файле и непосредственно в командной строке;

3) выполнить задание на создание файлов и каталогов, используя циклы.

 

1 Цикл FOR /D … IN … DO …

Вариант команды FOR с помощью ключа /D имеет формат:

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

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

file4.bat

@ECHO OFF

CLS

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

мы получим список каталогов в корневом каталоге диска С:

C:\IDE

C:\PerfLogs

C:\Program Files

C:\swsetup

C:\Temp

C:\Themes & Gadgets

C:\Users

C:\Windows

C:\Программные проекты

C:\Программы

C:\Работа

2 Цикл FOR /R … IN … DO …

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

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

 

В этом случае заданная команда выполняется для каталога [диск:]путь, а также для всех подкаталогов этого пути. Если после ключа R не указано имя каталога, то выполнение команды начинается с текущего каталога. Например, для распечатки всех файлов с расширением txt в текущем каталоге и всех его подкаталогах можно использовать следующий пакетный файл:

 

@ECHO OFF

CLS

FOR /R %%f IN (*.txt) DO TYPE %%f

 

Если вместо набора указана только точка (.), то команда проверяет все подкаталоги текущего каталога. Например, если мы находимся в каталоге C:\TEXT с двумя подкаталогами BOOKS и ARTICLES, то в результате выполнения файла:

@ECHO OFF

CLS

FOR /R %%f IN (.) DO ECHO %%f

 

На экран выведутся три строки:

C:\TEXT\.

C:\TEXT\BOOKS\.

C:\TEXT\ARTICLES\.

3 Цикл FOR /L … IN … DO …

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

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

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

 

@ECHO OFF

CLS

FOR /L %%f IN (1,1,5) DO ECHO %%f

 

На экран выводятся 5 чисел от 1 до 5

Рассмотрим следующий командный файл:

@ECHO OFF

CLS

FOR /L %%f IN (1,1,5) DO CALL :2 %%f

GOTO :EOF

:2

SET /A M=10*%1

ECHO 10*%1=%M%

 

В третьей строке в цикле происходит вызов нового контекста файла my.bat с текущим значением переменной цикла %%f в качестве параметра командной строки, причем управление передается на метку :2 . В шестой строке переменная цикла умножается на десять, и результат записывается в переменную M.

Таким образом, в результате выполнения этого файла выведется следующая информация:

10*1=10

10*2=20

10*3=30

10*4=40

10*5=50

4 Цикл FOR /F … IN … DO …

Самые мощные возможности (и одновременно самый запутанный синтаксис) имеет команда: FOR с ключом /F:

 

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

 

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

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

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

 

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

Разберем применение этой команды на примере пакетного файла parser.bat, который производит разбор файла myfile.txt:

parser.bat

@ECHO OFF

IF NOT EXIST myfile.txt GOTO :NoFile

FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN (myfile.txt) DO @ECHO %%i %%j %%k

GOTO :EOF

:NoFile

ECHO Не найден файл myfile.txt!

 

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

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

- Вторая и третья подстроки из каждой строки передаются в тело цикла, причем подстроки разделяются пробелами (по умолчанию) и/или запятыми (DELIMS=,*). - В теле цикла переменная *%%i используется для второй подстроки, %%j — для третьей, а %%k получает все оставшиеся подстроки после третьей.

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

ААА ББББ ВВВВ, ГГГГГ ДДДД ЕЕЕЕЕ

,ЖЖЖЖ ЗЗЗЗ ;

КККК ЛЛЛЛЛ МММММ

то в результате выполнения пакетного файла parser.bat на экран выведется следующее:

ББББ ВВВВ ГГГГГ ДДДД ЖЖЖЖ ЗЗЗЗ

Замечание

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

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

@ECHO OFF

FOR /F " EOL =; TOKENS =2,3* DELIMS =, " %%i IN ("ААА ББББ ВВВВ,ГГГГГ ДДДД") DO @ECHO %%i %%j %%k

 

при своем выполнении напечатает:

ББББ ВВВВ ГГГГГ ДДДД

 

Вместо явного задания строки для разбора можно пользоваться переменными среды, например:

@ECHO OFF

SET M=ААА ББББ ВВВВ,ГГГГГ ДДДД

FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN ("%M%") DO @ECHO %%i %%j %%k

 

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

 

@ECHO OFF

CLS

ECHO Имена переменных среды: ECHO.

FOR /F "DELIMS==" %%i IN ('SET') DO ECHO %%i

 

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

В цикле FOR допускается применение тех же синтаксических конструкций (операторов), что и для заменяемых параметров

Операторы Описание
%~Fi Переменная %i расширяется до полного имени файла
%~Di Из переменной %i выделяется только имя диска
%~Pi Из переменной %i выделяется только путь к файлу
%~Ni Из переменной %i выделяется только имя файла
%~Xi Из переменной %i выделяется расширение имени файла
%~Si Значение операторов N и X для переменной %i изменяется так, что они работают с кратким именем файла

 

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

Например, если мы находимся в каталоге C:\Program Files\Far и запустим командный файл следующего содержания:

@ECHO OFF

CLS

FOR %%i IN (*.txt) DO ECHO %%~Fi

 

то на экран выведутся полные имена всех файлов с расширением txt:

C:\Program Files\Far\Contacts.txt

C:\Program Files\Far\FarFAQ.txt

C:\Program Files\Far\Far_Site.txt

C:\Program Files\Far\License.txt

C:\Program Files\Far\License.xUSSR.txt

C:\Program Files\Far\ReadMe.txt

C:\Program Files\Far\register.txt

C:\Program Files\Far\WhatsNew.txt

 

 

Задания на выполнение работы:

1) Написать программу, которая с помощью цикла FOR /D ищет в log-файлах Windows сообщения, задаваемые пользователем. Текст сообщения вводится с клавиатуры.

2) Написать командный файл, который составляет список всех журналов (*.log) на диске С:

3) Написать программу, которая в текущем каталоге создаёт 50 файлов с именами от N.txt (где N=1…50) и записывает в каждый файл текущее время.



Дата: 2018-12-28, просмотров: 361.