Команда FIND используется для поиска текстовой строки в одном или нескольких файлах. Если путь не задан, команда FIND выполняет поиск в тексте консоли либо в тексте, переданном по конвейеру другой командой ( в тексте, являющемся выводом команды, выполняющейся в цепочке с FIND ).
1. Описание команды FIND.
1.1. Формат командной строки:
C:\ FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "строка" [[диск:][путь]имя_файла[ ...]]
1.2. Параметры команды:
- /V — Вывод всех строк, НЕ содержащих заданную строку.
- /C — Вывод только общего числа строк, содержащих заданную строку.
- /N — Вывод номеров отображаемых строк.
- /OFF[LINE] — Не пропускать файлы с установленным атрибутом «Автономный».
- /I — Поиск без учета регистра символов.
- «строка» — Искомая строка.
- [диск:][путь]имя_файла — Один или несколько файлов, в которых выполняется поиск.
2. Примеры использования.
2.1. Выдать справку по использованию команды:
C:\ find /?
2.2. Выполнить поиск строки новость без учета регистра символов в текстовом файле myfile.txt:
C:\ find /I myfile.txt "новость"
По умолчанию, если не задан параметр /I регистр символов учитывается.
2.3. Отобразить общее количество строк, содержащих текст «новость»:
C:\ find /C myfile.txt "новость"
2.4. Выполнить поиск в каталоге временных файлов для всех файлов с расширением tmp строк , содержащих текст windows без учета регистра символов:
C:\ find /I %TEMP%\*.tmp "windows"
2.5. То же, что и в предыдущем примере, но с использованием постраничного вывода на экран:
C:\ find /I %TEMP%\*.tmp "windows" | more
2.6. Из вывода команды ipconfig /all найти строки, содержащие текст DNS:
C:\ ipconfig /all | find "DNS"
2.7. Обратите внимание, на нехарактерный синтаксис этой команды — строка поиска обязательно заключается в двойные кавычки, поэтому имена и пути файлов, содержащих пробелы, обрабатываются некорректно. Для поиска в таких файлах можно воспользоваться перенаправлением ввода ( символ < ):
C:\ find "html" < "C:\Documents And Settings\USER\settings.xml"
2.8. Соответственно, пример с поиском во временных файлах, приведенный выше, в ОС Windows XP ( значение переменной %TEMP% по умолчанию принимает путь с пробелами ) будет выполняться верно при использовании следующей команды:
C:\ find /I "windows" < "%TEMP%\textfile.tmp"
2.9. Естественно, шаблон имени файла *.tmp использовавшийся в примере выше, при перенаправлении ввода применять нельзя ( перенаправление можно выполнять для конкретного файла — textfile.tmp в примере ) и для организации поиска текстовой строки в нескольких файлах можно воспользоваться циклической обработкой их содержимого , например, с помощью команды FOR.
@ECHO OFF for %%i in ("%TEMP%\*.tmp") do FIND %%i "windows" . . .
2.10. Применение команды 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.