Утилиты Find и FindStr


Утилиты Find и FindStr осуществляют поиск файлов по их содержимому. В большинстве случаев возможности утилиты Find более ограничены, поэтому в данной инструкции мы займемся детальным рассмотрением только утилиты FindStr. Единственной функцией Find, не поддерживаемой утилитой FindStr, является определение числа вхождений заданной строки поиска в файл при помощи ключа /С. Эта функция (а также небольшой объем утилиты Find) делает утилиту Find полезной в сценариях, для которых утилита FindStr избыточна.

Как начать поиск

Простейший способ проверить работу FindStr — вызвать ее с несложной строкой в качестве аргумента. FindStr выполнит поиск всех файлов в текущей папке, содержащих хотя бы одно слово строки. Например, следующая команда приведет к поиску в текущей папке всех файлов, содержащих слово «Hello» или «World»:

FindStr "Hello World"

Однако реальная мощь утилиты FindStr проявляется при создании особых строк с помощью регулярных выражений. Регулярное выражение при помощи специальных символов задает не конкретную строку, а шаблон, определяющий множество строк.

Регулярные выражения позволяют создавать сложные условия поиска, сокращающие его время и приводящие к хорошим результатам. Например, вы можете организовать поиск телефонных номеров посредством строки   если все номера снабжены кодом города и записаны в представленном формате. Мы лично пользовались этим методом для поиска телефонных номеров, скрытых в DLL- файлах.

Некоторые функции утилиты FindStr ориентированы на файлы строкового формата. FindStr считает признаком конца строки последовательность символов возврата каретки (код 13) и перехода на новую строку (код 10). Когда вы просматриваете текстовый файл, вы видите, что его строки отдельны друг от друга пустым пространством. Это пространство и создается благодаря признаку конца строки. В файлах, не предназначенных для чтения, необходимости в разбении на строки нет, поэтому сочетание символов возврата каретки и перехода па новую строку встречается нерегулярно, а может и вообще отсутствовать. Это означает, что в подобных файлах строки имеют очень большую длину, которая может быть равна длине самого файла.

Дополнительные ключи к утилите 

Утилита FindStr располагает набором удобных ключей, влияющих на ее работу и способ интерпретации строки поиска.

  • /A атрибут цвета — определяет режим отображения файлов в цвете. Вы должны указать два шестнадцатеричных числа (от 0 до F, что соответствует от 0 до 15 в десятичной форме), первое из которых задает цвет фона, а второе — цвет текста. Данный ключ не влияет на отображение текста соответствий, выводимого теми же цветами текста и фона, что и командная строка.
  • /B — сравнивает строку поиска с началом строки файла.
  • /C строка — выполняет символьный поиск. Например, для строки «Hello World» в обычном режиме утилита FindStr ищет слова «Hello» и «World» по отдельности. В результат поиска будет включена любая строка, содержащая хотя бы одно из этих слов. При использовании указанного ключа результат поиска будет ограничен строками, содержащими последовательность «Hello World» целиком.
  • /D папки — определяет список папок для поиска. Имена папок должны отделяться друг от друга запятыми.
  • /Е — сравнивает строку поиска с концом строки файла.
  • /G - файл — считывает из файла список файлов, которые необходимо обработать. То же самое можно сделать и из командной строки, используя символ /.
  • /С файл — считывает из файла список строк, поиск которых необходимо выполнить. То же самое можно сделать и из командной строки, используя символ /.
  • /I — выполняет поиск без учета регистра. В нормальном режиме утилита FindStr считает строки «Hello» и «hello» различными. При использовании данного ключа прописные буквы будут приравнены к строчным.
  • /L — воспринимает строку поиска как последовательность обычных символов. В этом режиме вы теряете возможность задания регулярных выражений.
  • /М — печатает только имена файлов, удовлетворяющих условиям поиска. Путем перенаправления вывода вы можете записать результат команды в файл и использовать его для дополнительной обработки, например, включить в сценарий.
  • /N — печатает номер в начале каждой строки, удовлетворяющей условиям поиска. Это ускоряет поиск строки в текстовом редакторе, поддерживающем нумерацию строк.
  • /О — печатает смещение найденного текста относительно начала строки. Это ускоряет поиск текста в текстовом редакторе, поддерживающем нумерацию столбцов.
  • /Р — пропускает файлы, содержащие непечатаемые символы, например, исполняемые модули. Учитывая, что большинство файлов данных в настоящее  время содержат непечатаемые символы, следует воздержаться от использования этого ключа, если вы точно не уверены, что искомый текст содержится в полностью текстовых файлах.
  • /S — ищет заданную строку во всех файлах текущей папки и всех вложенных в нее папках. Если применить этот ключ в корневой папке, то будет выполнен поиск на всем жестком диске. Поскольку утилита FindStr осуществляет фактический доступ к каждому проверяемому файлу, этот процесс может оказаться длительным.
  • /V — печатает только строки, не содержащие точного соответствия.
  • /X — печатает только строки, точно соответствующие условию поиска.