Найти тему

Командная строка Windows 7. Поиск файлов и строк в файлах

Оглавление

Рассмотрим возможности поиска файлов и текстовых данных в них с помощью CMD.

WHERE

Показывает расположение файлов, подходящих по шаблону.

WHERE [/R каталог] [/Q] [/F] [/T] шаблон

Без ключей WHERE ищет в текущем каталоге и в каталогах, указанных в переменной среды PATH.

where filename.txt
where filename.txt

Неизвестные символы в шаблоне можно заменить на * и ?
Например, my_????.* отберет все файлы, начинающиеся с my_, потом должно быть 4 любых символа, а расширение вообще может быть каким угодно сочетанием символов.

Можно подставить в шаблон путь для поиска или переменную среды, в которую записаны пути:
путь:шаблон
$имя_переменной:шаблон

В USERPROFILE находится путь до папки текущего пользователя
В USERPROFILE находится путь до папки текущего пользователя

/R Рекурсивный поиск и отображение файлов, соответствующих указанному шаблону, начиная с указанного каталога.

where /R C:\Users\Veronica cureit.log
where /R C:\Users\Veronica cureit.log

/Q Тихий режим - в командной строке ничего отображаться не будет, только ERRORLEVEL поменяется в зависимости от результата работы. Можно использовать в пакетных файлах для ветвления программы.

После выполнения в переменную ERRORLEVEL будет записан 0, если поиск был успешным, 1 - если безуспешным, и 2, если возникли ошибки.

Файл proc в папке есть, а вот pro - нет
Файл proc в папке есть, а вот pro - нет

/F Отображение найденных файлов в кавычках. Может пригодиться при записи результата поиска в переменную.
/T Отображение размера, даты и времени изменения для найденных файлов.

where /F /T /R C:\Users\Veronica *tool*.log Build*.bat
where /F /T /R C:\Users\Veronica *tool*.log Build*.bat

Теперь поищем текст в файлах.

FIND

Ищет текстовую строку в одном или даже нескольких файлах.

FIND [/V][/C][/N][/I][/OFF[LINE]] "строка" [[диск:][путь]имя_файла ...

"строка" Искомая строка. Задавать нужно обязательно в кавычках :)

Если путь для поиска не задан, выполняется поиск в тексте консоли либо в тексте, переданном другой командой. Например, можно отфильтровать результат работы других команд:

where test_find*.* | find "_2"
where test_find*.* | find "_2"

диск:путь\имя_файла Можно перечислить несколько файлов через пробел

Для примера создала пару файлов test_find.txt и test_find_2.txt, чтобы поискать в них строку "hello":

find "hello" D:\test_find.txt D:\test_find_2.txt
find "hello" D:\test_find.txt D:\test_find_2.txt

/N Вывод номеров отображаемых строк
/I Поиск без учета регистра символов

find /N /I "hello" D:\test_find.txt D:\test_find_2.txt
find /N /I "hello" D:\test_find.txt D:\test_find_2.txt

/C Вывод только общего числа строк, содержащих заданную строку

find /C "hello" D:\test_find.txt D:\test_find_2.txt
find /C "hello" D:\test_find.txt D:\test_find_2.txt

/V Вывод всех строк, НЕ содержащих заданную строку

find /V "hello" D:\test_find.txt D:\test_find_2.txt
find /V "hello" D:\test_find.txt D:\test_find_2.txt

/OFF[LINE] Не пропускать файлы с установленным атрибутом "Автономный". Важно, если работаете с сетевыми расположениями.

FINDSTR

Прокачанная версия FIND, имеющая больше опций для поиска строк.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл]
[/C:строка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]]
строки [[диск:][путь]имя_файла[ ...]]

find "hello" D:\test_find.txt D:\test_find_2.txt
find "hello" D:\test_find.txt D:\test_find_2.txt

/C:строка Использует заданную строку как искомую фразу поиска
/M Печатает только имя файла, в котором найдено совпадение

findstr /M /C:"hi" D:\test_find.txt D:\test_find_2.txt
findstr /M /C:"hi" D:\test_find.txt D:\test_find_2.txt

/S Поиск файлов в текущей папке и всех ее подпапках
/D:список_папок Поиск в списке папок (разделяются точкой с запятой)

findstr /S /C:"hi" *.*
findstr /S /C:"hi" *.*

/B Искать образец только в началах строк
/E Искать образец только в конце строк
/L Поиск строк дословно

findstr /L /C:"friend" *.*
findstr /L /C:"friend" *.*

/F:файл Читает список файлов из заданного файла (/ для консоли)
/G:файл Получение строк из заданного файла (/ для консоли)

findstr /F:"from.txt" /G:"str.txt"
findstr /F:"from.txt" /G:"str.txt"

/I Поиск без учета регистра
/R Поиск строк как регулярных выражений

Да, FINDSTR поддерживает регулярные выражения:

  • . Любой символ
  • * Повтор: ноль или более вхождений предыдущего символа или класса
  • ^ Позиция в строке: начало строки
  • $ Позиция в строке: конец строки
  • [множество] Любой единичный символ из множества
  • [^множество] Любой единичный символ не из множества
  • [x-y] Любые символы из указанного диапазона
  • \x Символьное обозначение служебного символа x
  • \<xyz Позиция в начале слова
  • xyz\> Позиция в конце слова

Пара примеров регулярок:

Слово начинается на w: /C:"\<[w]"
Слово оканчивается на w:
/C:"[w]\>"

-16

В слове есть ", " и дальше идет буква p, q, r, s, t, u, v, w: /C:", [p-w]"

-17

/N Печатает номер строки, в которой найдено совпадение
/O Печатает найденные строки через пустую строку
/A:XY Две шестнадцатеричные цифры - атрибуты цвета фона и шрифта. "Подцветка" работает так же, как в команде COLOR

findstr/A:48 /N /O  /R /C:h. D:\test_find.txt D:\test_find_2.txt
findstr/A:48 /N /O /R /C:h. D:\test_find.txt D:\test_find_2.txt

/X Печатает строки, которые совпадают точно
/V Печатает строки, не содержащие совпадений с искомыми

findstr /V /R /C:"hello, [a-z]*" D:\test_find.txt D:\test_find_2.txt
findstr /X /R /C:"hello, [a-z]*" D:\test_find.txt D:\test_find_2.txt
findstr /V /R /C:"hello, [a-z]*" D:\test_find.txt D:\test_find_2.txt findstr /X /R /C:"hello, [a-z]*" D:\test_find.txt D:\test_find_2.txt

/P Пропускает строки, содержащие непечатаемые символы
/OFF[LINE] Не пропускать файлы с установленным атрибутом "Автономный". Важно, если работаете с сетевыми расположениями.

Предыдущие статьи цикла:

Можете также посмотреть Миниобзор программ-терминалов, там рассказывается об отправке и получении данных с COM-порта через CMD.

Можно проверять и активировать лицензию MS Office из CMD.

Можно даже мониторить температуру процессора стандартными средствами Windows (WMI) через CMD.