Команда 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.