- •Интерпретатор командной строки ос ms Windows xp
- •Часть 2. Язык интерпретатораикомандные файлы
- •1. Краткие теоретические сведения
- •1.1 Язык интерпретатора Cmd.Exe. Командные файлы
- •1.1.1 Параметры командной строки. Команда shift
- •1.1.2 Функции анализа имен файлов
- •1.1.3. Переменные среды. Оператор присваивания set. Получение значений переменных
- •1.1.4. Преобразования переменных как строк
- •1.1.5. Операции с переменными как с числами
- •1.1.6 Ввод значения переменной с клавиатуры
- •1.1.7. Связывание времени выполнения для переменных
- •1.1.8. Прерывание и приостановка выполнения командных файлов
- •1.1.9. Вызов внешних командных файлов. Оператор call
- •1.1.11. Оператор перехода goto
- •1.1.12. Оператор проверки условия if
- •1.1.13. Организация циклов c помощью оператора цикла for
- •Цикл for … in … do … (выполнение команды для каждого элемента множества)
- •Цикл for /d … in … do … (выполнение команды для подкаталогов)
- •Цикл for /r … in … do … (выполнение заданной команды для определенного каталога, а также всех его подкаталогов)
- •Цикл for /l … in … do … (получение последовательности чисел с заданными началом, концом и шагом приращения)
- •1.1.14. Циклы и связывание времени выполнения для переменных
- •1.1.15. Утилита поиска строк в текстовых файлах Findstr
- •2. Методика выполнения
1.1.14. Циклы и связывание времени выполнения для переменных
При обработке переменных среды внутри цикла могут возникать ошибки, связанные с ранним связыванием переменных.
Пример 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%
1.1.15. Утилита поиска строк в текстовых файлах 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%