Команда FINDSTR выполняет поиск строк по тексту или регулярным выражениям в одном или нескольких файлах и выводит совпадающие строки. Это основной инструмент для фильтрации вывода и анализа текстовых данных прямо в CMD — аналог grep в Linux.
- Синтаксис команды FINDSTR
- Ключи и параметры
- Примеры использования
- Поиск строки в одном файле
- Рекурсивный поиск по всем файлам в каталоге
- Поиск с регулярным выражением
- Инвертированный поиск — исключить строки
- Фильтрация вывода другой команды
- Найти только имена файлов без вывода строк
- Поиск по нескольким шаблонам из файла
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- Как найти строку в файле без учёта регистра?
- Как использовать FINDSTR в конвейере с другими командами?
- Поддерживает ли FINDSTR полные регулярные выражения PCRE?
- Как найти строки, содержащие одно из нескольких слов?
- Как перенаправить результат FINDSTR в файл?
- Чем FINDSTR отличается от FIND?
Синтаксис команды FINDSTR
FINDSTR [ключи] строка [[диск:][путь]имя_файла ...]
Плейсхолдеры:
строка— искомый текст или регулярное выражение. Если содержит пробелы — заключите в двойные кавычки.имя_файла— один или несколько файлов (поддерживаются маски*,?). Если файл не указан, FINDSTR читает из стандартного ввода (stdin).
Ключи и параметры
| Ключ | Описание | Пример |
|---|---|---|
/B | Искать совпадение только в начале строки | FINDSTR /B "Error" app.log |
/E | Искать совпадение только в конце строки | FINDSTR /E ".dll" list.txt |
/L | Воспринимать строку как буквальный текст (по умолчанию) | FINDSTR /L "192.168" hosts.txt |
/R | Использовать регулярные выражения при поиске | FINDSTR /R "^Error.*fail" app.log |
/S | Искать рекурсивно во всех подкаталогах | FINDSTR /S "TODO" *.py |
/I | Игнорировать регистр символов | FINDSTR /I "error" app.log |
/X | Выводить только строки, полностью совпадающие с шаблоном | FINDSTR /X "OK" results.txt |
/V | Инвертированный поиск — выводить строки, НЕ совпадающие с шаблоном | FINDSTR /V "OK" results.txt |
/N | Выводить номер строки перед каждым совпадением | FINDSTR /N "warn" app.log |
/M | Выводить только имена файлов, содержащих совпадение (без строк) | FINDSTR /M /S "password" *.cfg |
/O | Выводить смещение символа перед каждым совпадением | FINDSTR /O "key" data.txt |
/P | Пропускать файлы, содержащие непечатаемые символы | FINDSTR /P /S "text" *.* |
/G:файл | Читать строки поиска из указанного файла (одна строка = один шаблон) | FINDSTR /G:patterns.txt log.txt |
/F:файл | Читать список файлов для поиска из указанного файла | FINDSTR /F:files.txt "error" |
/C:строка | Использовать строку как единый буквальный шаблон (учитывает пробелы) | FINDSTR /C:"access denied" app.log |
Примеры использования
Поиск строки в одном файле
Найти все строки, содержащие слово «error» в лог-файле.
FINDSTR "error" C:\Logs\app.log
Команда выведет все строки, содержащие «error» (с учётом регистра). Добавьте /I для поиска без учёта регистра.
Рекурсивный поиск по всем файлам в каталоге
Найти все вхождения строки «TODO» во всех Python-файлах проекта.
FINDSTR /S /N "TODO" C:\Project\*.py
Команда обходит все подкаталоги и выводит имя файла и номер строки для каждого совпадения.
Поиск с регулярным выражением
Найти строки, начинающиеся с «ERROR» и содержащие четыре цифры подряд (код ошибки).
FINDSTR /R /I "^ERROR.*[0-9][0-9][0-9][0-9]" C:\Logs\app.log
FINDSTR поддерживает упрощённые регулярные выражения: . (любой символ), * (ноль и более предыдущих), ^ (начало строки), $ (конец строки), [ ] (класс символов).
Инвертированный поиск — исключить строки
Получить все строки лога, кроме информационных сообщений.
FINDSTR /V /I "^INFO" C:\Logs\app.log
Выведет все строки, которые не начинаются с «INFO» (без учёта регистра).
Фильтрация вывода другой команды
Показать только запущенные сервисы из вывода SC QUERY.
SC QUERY | FINDSTR /I "running"
FINDSTR принимает данные из stdin, что делает его незаменимым в конвейерах.
Найти только имена файлов без вывода строк
Быстро получить список конфигурационных файлов, содержащих пароль.
FINDSTR /M /S /I "password" C:\Config\*.ini
Будут выведены только имена файлов — по одному в строке.
Поиск по нескольким шаблонам из файла
Если нужно искать одновременно десятки слов, удобнее перечислить их в файле.
FINDSTR /G:C:\keywords.txt C:\Logs\combined.log
Файл keywords.txt содержит один шаблон на строку. Команда выводит строки, совпадающие хотя бы с одним из них.
Частые ошибки и решения
| Ошибка / симптом | Причина | Решение |
|---|---|---|
| Нет вывода при поиске кириллицы | Кодировка CMD (866) не совпадает с кодировкой файла (UTF-8 или 1251) | Переключите страницу: CHCP 1251 или CHCP 65001; убедитесь, что кодировка файла совпадает |
| Строка с пробелами не ищется или ищется частично | Шаблон без кавычек разбивается на несколько аргументов | Используйте /C:"фраза с пробелами" или заключайте всю строку в двойные кавычки |
| Регулярное выражение не работает как ожидается | FINDSTR использует упрощённый движок — не все конструкции PCRE поддерживаются | FINDSTR поддерживает только базовый набор: ., *, ^, $, [ ]. Для полноценных regex используйте PowerShell: Select-String -Pattern |
Ошибка «Не найдено» при использовании маски *.* с /S | Маска без указания пути ищет только в текущем каталоге | Явно укажите путь: FINDSTR /S "текст" C:\Path\*.* |
| Бинарные файлы вызывают «мусор» в выводе | FINDSTR не фильтрует бинарный контент | Добавьте ключ /P — он пропустит файлы с непечатаемыми символами |
Когда применять, а когда нет
Команда FINDSTR — правильный выбор для поиска по тексту в скриптах, фильтрации вывода команд через конвейер и быстрого анализа логов прямо в CMD. Она работает без установки дополнительного ПО. Ограничения: упрощённый движок регулярных выражений без поддержки +, ?, группировки и lookahead; слабая работа с кодировками UTF-8; отсутствие многострочного поиска. Для сложного поиска и полноценных regex в PowerShell используйте Select-String с параметром -Pattern — он поддерживает .NET-регулярные выражения и правильно обрабатывает Unicode.
FAQ
Как найти строку в файле без учёта регистра?
Добавьте ключ /I: FINDSTR /I "error" app.log. Команда найдёт «error», «Error», «ERROR» и любые другие варианты написания.
Как использовать FINDSTR в конвейере с другими командами?
FINDSTR читает из stdin, поэтому любой вывод можно передать через |. Например: NETSTAT -AN | FINDSTR ":80" — покажет только соединения на порту 80.
Поддерживает ли FINDSTR полные регулярные выражения PCRE?
Нет. FINDSTR поддерживает только базовый набор: точка, звёздочка, якоря ^ и $, классы символов. Квантификаторы + и ?, группировка, lookahead — не поддерживаются. Для полноценных regex используйте PowerShell Select-String.
Как найти строки, содержащие одно из нескольких слов?
Перечислите шаблоны через пробел в кавычках (логическое ИЛИ): FINDSTR "error warning critical" app.log. Или создайте файл с шаблонами и используйте /G:файл.
Как перенаправить результат FINDSTR в файл?
Используйте стандартное перенаправление: FINDSTR /S /I "error" *.log > errors.txt. Для добавления в существующий файл: >> errors.txt.
Чем FINDSTR отличается от FIND?
Команда FIND ищет только буквальные строки и значительно проще. FINDSTR поддерживает регулярные выражения, рекурсивный поиск (/S), поиск по нескольким файлам с масками, фильтрацию по бинарным файлам (/P) и списки шаблонов из файла (/G). Для простого поиска фразы FIND быстрее; для сложных задач — FINDSTR.


