Циклы и связывание времени выполнения для переменных



При обработке переменных среды внутри цикла могут возникать ошибки, связанные с ранним связыванием переменных.

Пример 10. Пусть имеется КФ, включающий команды:

SET a=

FOR %%i IN (Раз, Два, Три) DO SET a=%a%%%i

ECHO a=%a%

В результате его выполнения на экран будет выведена строка "a=Три".

Для исправления ситуации нужно, как и в случае с составными выражениями, вместо знаков процента (%) использовать восклицательные знаки и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, приведенный выше пример следует переписать следующим образом:

SETLOCAL ENABLEDELAYEDEXPANSION

SET a=

FOR %%i IN (One,Two,Three) DO SET a=!a!%%i

ECHO a=%a%

Утилита поиска строк в текстовых файлах Findstr

Назначение утилиты Findstr- поиск строк в текстовых файлах. Вызов утилиты имеет вид:

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:файл]

[/C:строка] [/G:файл] [/D:список_папок] [/OFF[LINE]]

строки [[диск:][путь]имя_файла[ ...]]

/L поиск строк дословно.

/R поиск строк как регулярных выражений.

/S поиск файлов в текущей папке и всех ее подпапках.

/I определяет, что поиск будет вестись без учета регистра.

/X печатает строки, которые совпадают точно.

/V печатает строки, не содержащие совпадений с искомыми.

/N печатает номер строки, в которой найдено совпадение, и ее содержимое.

/M печатает только имя файла, в которой найдено совпадение.

/O печатает найденный строки через пустую строку.

/F:файл читает список файлов из заданного файла (/ для консоли).

/C:строка использует заданную строку как искомую фразу поиска.

/D:список_папок поиск в списке папок (разделяются точкой с запятой).

строка искомый текст.

[диск:][путь]имя_файла - задает имя файла или файлов.

Можно использовать пробелы для разделения нескольких искомых строк. Например, команда 'FINDSTR "Привет мир" a.b' ищет "Привет" или "мир" в файле a.b, а команда с ключом /C

FINDSTR /C:"Привет мир" a.b ищет строку "Привет мир" в файле a.b.

Утилита FindStr c ключом /R дает возможность использовать для задания шаблона поиска несложные регулярные выражения. Краткая справка по синтаксису регулярных выражений:

. Любой символ.

* Повтор: ноль или более вхождений предыдущего символа или класса

^ Позиция в строке: начало строки

$ Позиция в строке: конец строки

[класс] Класс символов: любой единичный символ из множества

[^класс] Обратный класс символов: любой единичный символ из дополнения

[x-y] Диапазон: любые символы из указанного диапазона, например [0-1] –двоичная цифра, [a-z] – строчная буква латинского алфавита

\x Служебный символ: символьное обозначение служебного символа x (символ \ называется экранирующим. Например \. означает точку, а не любой один символ строки).

\<xyz Позиция в слове: в начале слова

xyz\> Позиция в слове: в конце слова

Пример 11. КФ для подсчета количества строк в файле num.txt, в которых присутствует хотя бы одна двоичная цифра.

set /a kol=0

for /f %%b in ('findstr /rc:"[0-1]" num.txt') do set /a kol=kol+1

echo %kol%

 

2. МЕТОДИКА ВЫПОЛНЕНИЯ

  1. Неформально ознакомиться с теоретическими сведениями.
  2. Для подготовки текстов КФ рекомендуется использовать блокнот (Notepad), следует избегать использования в выводимых на экран результатах работы КФ букв русского алфавита.
  3. На этапе отладки КФ следует закомментировать строки @ECHO OFF и CLS.
  4. Разработать и выполнить КФ, выполняющие следующие функции:

Вывод на экран имен всех файлов с указанным расширением, находящихся в каталоге, имя которого задается при запуске КФ первым параметром. Расширение файлов задается вторым параметром. Запускаемый КФ должен состоять из ОДНОЙ строки.

Среди введенных с клавиатуры целых чисел (использовать SET /P) найти наибольшее и наименьшее. Признак конца ввода – знак -. Использовать цикл с использованием GOTO.

В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только требуемый результат. Использовать цикл FOR /D.

В каталогах, имена которых заданы первым и вторым параметрами КФ, найти и вывести на экран имена файлов (расширения могут быть любые), присутствующих как в первом, так и во втором каталогах. Использовать один FOR и IF для проверки присутствия файла во втором каталоге.

Вычисление и вывод на экран значения факториала целого числа, задаваемого при запуске КФ (в командной строке). Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально допустимую величину, выводить соответствующие сообщения. Использовать FOR /L. Проверить правильность вычисленного значения факториала с помощью калькулятора.

  1. Разработать и выполнить КФ в соответствии с табл. 5.
  2. Ответить (устно) на контрольные вопросы. Устными ответами, записанными на бумаге, во время отчета бригады по выполненной работе пользоваться нельзя.

Таблица 5. Индивидуальные задания для студентов

Выполнить все задания

а) Написать bat-файл формирующий список всех файлов, расположенных на устройстве c: в текущем каталоге выдать на экран и в файл all.txt (в каталог c:\temp или в каталог группы)

@echo off

subst x: c:\temp

dir >x:\all.txt

type x:\all.txt

 

б) Среди файлов, расположенных в каталоге c:\Winnt найти самый длинный файл.

@echo off

dir /O:-S c:\winnt | more

 

в) Написать bat-файл, выдающий содержимое файлов с расширением txt из текущего каталога на устройстве с: на экран.

@echo off

for %%i in (*.txt) do type type *.txt

 

г) Написать bat-файл, имена файлов в каталоге Winnt на устройстве c:, в расширении которых вторая буква - x, записать в файл withx.txt

@echo off

dir *.?x* > c:\temp\withx.txt

д). Написать bat-файл, который имена файлов, содержащих в расширении символ x, записывает в файл x.txt

@echo off

dir *.*x* > x.txt

 

е). Из файлов в корневом каталоге на устройстве c: выбрать файл с самым поздним временем создания.

@echo off

dir /O:D c: | more

 

ж) Все буквы r в именах файлов заменить на буквы p.

@echo off

Break on

SET A=

:start

rename %A%r*.* %A%p*.*

SET A=%A%?

Goto start

 

з) Написать bat-файл, рисующий бесконечный треугольник:

@echo off

Break on

SET A=

:loop

SET A=%A%aa

echo %A%

Goto loop

 


Дата добавления: 2018-08-06; просмотров: 818; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!