Команда FIND - поиск строки символов в файлеФормат командной строки: FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "строка" [[диск:][путь]имя_файла[ ...]] Параметры команды: /V - Вывод всех строк, НЕ содержащих заданную строку. /C - Вывод только общего числа строк, содержащих заданную строку. /N - Вывод номеров отображаемых строк. /OFF[LINE] - Не пропускать файлы с установленным атрибутом "Автономный". /I - Поиск без учета регистра символов. "строка" - Искомая строка. [диск:][путь]имя_файла - Один или несколько файлов, в которых выполняется поиск. Примеры использования: FIND /? - выдать справку по использованию команды. find /I myfile.txt "новость" - выполнить поиск строки новость без учета регистра символов в текстовом файле myfile.txt . По умолчанию, если не задан параметр /I регистр символов учитывается. find /C myfile.txt "новость" - отобразить общее количество строк, содержащих текст "новость". FIND /I %TEMP%\*.tmp "windows" - выполнить поиск в каталоге временных файлов для всех файлов с расширением tmp строк , содержащих текст windows без учета регистра символов. FIND /I %TEMP%\*.tmp "windows" | more - то же, что и в предыдущем примере, но с использованием постраничного вывода на экран. ipconfig /all | FIND "DNS" - из вывода команды ipconfig /all найти строки, содержащие текст DNS Обратите внимание, на нехарактерный синтаксис этой команды - строка поиска обязательно заключается в двойные кавычки, поэтому имена и пути файлов, содержащих пробелы, обрабатываются некорректно. Для поиска в таких файлах можно воспользоваться перенаправлением ввода ( символ < ) find "html" < "C:\Documents And Settings\USER\settings.xml" Соответственно, пример с поиском во временных файлах, приведенный выше, в ОС Windows XP ( значение переменной %TEMP% по умолчанию принимает путь с пробелами ) будет выполняться верно при использовании следующей команды: FIND /I "windows" < "%TEMP%\textfile.tmp" Естественно, шаблон имени файла *.tmp использовавшийся в примере выше, при перенаправлении ввода применять нельзя ( перенаправление можно выполнять для конкретного файла - textfile.tmp в примере ) и для организации поиска текстовой строки в нескольких файлах можно воспользоваться циклической обработкой их содержимого , например, с помощью команды FOR. @ECHO OFF for %%i in ("%TEMP%\*.tmp") do FIND %%i "windows" . . . Применение команды FIND для поиска строки в результатах вывода другой программы используется, например, для определения доступности сетевого узла с помощью команды PING . Утилита ping.exe не возвращает признак доступности пингуемого адреса в значении переменной ERRORLEVEL (Ненулевое значение ERRORLEVEL утилита ping.exe формирует только в том случае, если заданы ошибочные параметры командной строки). Поэтому, для определения доступности IP- адреса, используется анализ вывода ping.exe, который отличается для доступного и недоступного узла. Так, например, если пингуемый адрес доступен, то в сообщении будет присутствовать значение TTL: Обмен пакетами с yandex.ru [87.250.250.11] по 32 байт: Ответ от 87.250.250.11: число байт=32 время=10мс TTL=55 А в случае недоступности, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0 Таким образом, для определения факта доступности узла в командном файле можно воспользоваться следующим способом: ping -n 1 COMPUTER | find /I "TTL" > nul if %ERRORLEVEL%==0 goto LIVE ECHO computer не доступен подпрограмма обработки недоступного состояния . . . Exit :LIVE - начало подпрограммы обработки состояния доступности узла . . . . . . Команда ping используется в цепочке с командой find (конвейер ) и результаты ее вывода используются в качестве ввода для поиска строки "TTL". В конвейер добавлена команда перенаправления стандартного вывода на фиктивное устройство nul, т.е. подавление вывода. Ключ -n 1 задает однократный опрос узла COMPUTER для ping.exe. |
|