Windows командная строка найти все файлы

Поиск текста в файлах через командную строку Windows

Недавно мы рассматривали поиск файлов через командную строку Windows. Сегодня поговорим о том, как найти внутри файлов нужный нам текст. Сделать это можно при помощи команды FIND.

Команда find сообщает имена файлов, в которых был найден искомый файл, и выводит строки, в которых он содержится.

Синтаксис команды find :

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «искомый_текст» [путь_к_файлу]

V — вывод всех строк, НЕ содержащих искомый текст;

C — вывод только общего числа строк, содержащих искомый текст;

N — вывод номеров строк;

I — поиск без учёта регистра символов;

OFF[LINE] — не пропускать файлы с атрибутом «автономный».

Для примера проверим все текстовые файлы в каталоге C:\test\ на наличие слова «текст».

Если посмотреть на скриншот ниже, то можно подумать, что ни один из файлов не содержит слова «текст». Конечно, это вполне допустимый вариант. Но есть и другое объяснение.

Дело в том, что по умолчанию текст в командной строке Windows отображается согласно кодовой странице CP866, а в файлах он в кодовой странице CP1251. Поэтому нам достаточно сменить кодовую страницу в текущем окне командной строки. О том, как это сделать, можно прочитать в статье по этой ссылке.

Теперь мы видим, что слово «текст» встречается во всех трёх файлах.

Теперь посмотрим на строки, в которых нет слова «текст»:

Такие оказались только в файле FILE_1.TXT.

Помните, что команда find по умолчанию учитывает регистр. Поэтому, написав в ней «Текст», мы не найдём подобного слова в файлах. Но регистр можно и проигнорировать:

На скриншоте ниже хорошо видно, что сперва команда не нашла слова «Текст» в файлах, так как в них оно записано без заглавных букв. Добавив /i , мы это исправили.

Допустим, нам нужно знать порядковые номера строк, в которых отсутствует слово «текст»:

Если мы захотим знать число строк, в которых присутствует искомое слово, тогда выполним команду:

А если нам нужно знать число строк, где это слово отсутствует, тогда пример команды такой:

Хотя до этого в примерах мы искали отдельное слово, find спокойно ищет и выражения:

Особенностью команды find является то, что искомый текст обязательно нужно заключать в кавычки. Это приводит к трудностям, если в пути к файлам (и в именах файлов) содержится пробел. В таком случае нужно воспользоваться перенаправлением ввода, но только если мы ищем в конкретном файле.

Как видите, наличие пробела в имени каталога C:\test test\ не помешало осуществить поиск. Но это что касается поиска в файле file_1.txt. А вот попытка поискать сразу во всех файлах привела к ошибке.

Читайте также:  Установка манджаро линукс пошагово

В таком случае можно воспользоваться циклическое обработкой, к примеру, командой for :

Помните, что в этом случае в командной строке нужно использовать конструкции вида %a, а в файлах .bat и .cmd вида %%a.

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

Для следующего примера вернём кодовую страницу CP866. После этого отсортируем вывод команды ipconfig /all — оставим только те строки, где содержится слово «Состояние»:

Здесь мы лишь пробежались по вершинам, но возможности команды find гораздо больше. Особенно, если использовать её в комплексе с другими командами.

Утилита dir — поиск файлов в командной строке

В продолжение предыдущей статьи, мы рассмотрим поиск файлов через командную строку с помощью утилиты Dir. Утилита dir как правило используется для вывода списка файлов и каталогов в заданной папке, но так как с помощью параметров можно указать фильтр для выводимой информации, то утилита командной строки подходит и для поиска файлов или каталогов. Но, прежде, немного лирики…

Как то я наблюдал такую ситуацию: женщина заходила в социальную сеть Однокласники, потом вставляла в CR-ROM диск, на котором были ее фотки с любимым котом Мурзиком. Естественно, автоматически выскакивало диалоговое окно, в котором была вкладка, вроде, точно не помню, “Копировать изображения”, женщина благополучно на нее нажимала и ждала, что все фотографии автоматически появятся на ее станице в Однокласниках. Это меня конечно улыбнуло, стоит заметить настойчивость данной дамы, так как она повторяла процесс по несколько раз и в итоге неудач, пожаловалась на качество интернет услуг. В добавок, она умудрилась установить в системе сразу две антивирусные программы (NOD и Касперский), в итоге, Windows висел не по детски.

Командная строка dir

Утилиту dir можно использовать на ровне с утилитами find и findstr. В данной статье будет рассмотрен скрипт поиска файла в командной строке Windows. Прежде чем приступать к написанию примера, давайте рассмотрим, с какими ключами работает утилита DІR:

DIR [диск: ] [путь] [имя_файла] [/А[ [ : ]атрибуты] ] [/B] [/C] [/D] [/L] [/N] [/ 0[[:] порядок]] [/P] [/Q] [/S] [/Т[[:]дата]] [/W] [/X] [/4]

[диск: ] [путь] – тут нужно указать имя диска и каталога, содержимое которых надо показать

[имя_файла] – говорит о том, что надо включить в список имена, которые надо показать, как вы уже догадались, тут можно использовать и подстановочные знаки: * или ?. Для примера, на диске D я создал папку TEST, в которую поместил несколько документов различного типа:

  • generate.mf
  • infosys.mf
  • sysinfo.mf
  • xa_032.рdf
  • xa_033.рdf
  • xa_034.рdf
  • xa_035.рdf
  • xa_036.рdf
  • xa_037.pdf
  • send_mail_data.vbs.txt
  • send_mail_text.vbs.txt
  • subdomen_scan.wsf.txt

Стоит помнить, что для параметра [имя_файла] нельзя задать через запятую собственную цепочку. Теперь для разминки, осуществим поиск файла через командную строку с расширением pdf. Для этого пропишем:

Читайте также:  Оснастка управления принтерами windows 10

Dir d:\test*.pdf

После выполнения заданной команды, мы увидим только те документы, которые имеют расширение pdf.

Хорошо, продолжим рассмотрение ключей:

[/А[ [ : ]атрибуты] ] – использование данного ключа позволяет отфильтровать вывод списка по атрибутам, которые могут принимать следующие значения, их можно использовать совместно:

D – собственно, только папки

H – включает вывод только скрытых документов

S – включает вывод только системных документов

R – атрибут файла “только чтение”

A – атрибут файла “архивный”

— – данный префикс имеет значение НЕ

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

DIR C:\ /A:HS – вывод только тех, которые имеют атрибуты «скрытый» и «системный».

DIR С:\ /А:-Н – вывод всех, кроме скрытых.

DIR С:\ /A:D – выводим список всех каталогов

– перечисляет только названия каталогов и имена файлов (в длинном формате) по одному на строчку, включая расширение. При этом выводится только основная информация, без итоговой.

/S –просмотреть информацию не только из текущего каталога, но и из его подпапок

Ну, теперь для написания скрипта, который осуществит поиск файлов в командной строке, информации достаточно. Цель такова, написать батник (searchfiles.cmd) которому будут передаваться два аргумента: путь к диску или каталогу и шаблон, по которому будет происходить поиск файла через командную строку Windows. И так, смотрим на пример:

@If «%1″==»» (Set pathf=D:\test) else (Set pathf=%1)

@If «%2″==»» (Set exmf=*.pdf) else (Set exmf=%2)

Dir %pathf%%exmf% /s

В первой строчке мы проверяем наличие первого аргумента, если он пуст, то, переменная pathf будет содержать путь по умолчанию D:\test. Во второй – происходит проверка на второй аргумент и аналогично, при его отсутствии, переменная exmf получает значение по умолчанию *.pdf. В последней строчке будет происходить поиск файлов в командной строке по заданному шаблону.

Не стоит забывать, что сервер сценариев Windows Script Host для работы с каталогами использует объект Folder, который значительно превосходит по возможностям утилиту командная строка dir.

Спасибо за внимание. Автор блога Владимир Баталий

Поиск файлов в командной строке Windows

Начиная с Windows 7 в операционных системах от Microsoft можно использовать команду WHERE, чтобы найти нужные файлы.

Синтаксис команды where выглядит следующим образом:

WHERE [/R каталог_для_поиска] [/Q] [/F] [/T] [шаблон_для_поиска]

Разберём используемые в команде параметры.

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

Q — возврат только кода выхода без отображения списка найденных файлов («тихий режим»);

F — отображение имён найденных файлов в кавычках;

T — отображение размера, даты и времени изменения найденных файлов.

Читайте также:  Ноутбук dell windows boot manager

Пользоваться командой where просто. Но учитывайте, что нужно указывать расширение искомого файла. Либо использовать * , чтобы команда нашла файлы всех расширений с подобным именем.

Обратите внимание на скриншот ниже. Шаблона test команде where оказалось недостаточно. А вот когда мы написали test*, команда поняла, что после test может быть что угодно, в том числе и любое расширение.

Продолжаем. Вводим команду

и видим информацию о размере, дате и времени редактирования файла. В данном случае наш файл пуст.

Обратите внимание, что по умолчанию (без параметра R) поиск осуществляется в текущем каталоге и каталогах, заданных значением переменной среды PATH.

Это значит, что если мы хотим поискать на всём диске C, нам необходимо использовать следующую конструкцию:

Как видите, поиск выдал нам расположение двух файлов, содержащих в имени file_test.

Если нам лучше известно местоположение искомого файла, мы можем сузить зону поиска, указав каталог:

Конечно, мы можем поискать все файлы с одним определённым расширением:

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

Ниже пример: сперва мы использовали конструкцию ??le_test*, и команда поняла, что первые два символа могут быть любыми, потом должно идти «le_test», а дальше любые символы. Под этот шаблон подходит file_test.xlsx. А вот под шаблон ?le_test* он уже не подходит. Так как в этом шаблоне перед «le_test» стоит всего один любой символ.

Может ли шаблон содержать сразу несколько разных имён файлов или несколько разных расширений? Может! Как видно на скриншоте ниже, сначала мы поискали файлы с расширениями .xlsx и .txt, а затем файлы, в имени которых содержится file_test или test. В обоих случаях команда where нашла такие файлы.

Пример использования параметра F (добавляет кавычки):

Пару слов о параметре Q. Как уже было сказано, он используется для того, чтобы не отображать месторасположение файлов. При использовании параметра Q команда where просто выведет результаты поиска — найдены искомые файлы или нет. Для вывода результата команда использует переменную ERRORLEVEL, которая может принимать три значения:

0 — искомые файлы найдены;

1 — искомые файлы не найдены;

2 — во время поиска произошла ошибка.

Как видите, файл test.txt в каталоге c:\mega есть, а файла test.pdf нет.

Возможно, кому-то станет интересно, какое значение примет переменная ERRORLEVER, если одновременно поискать присутствующий и отсутствующий файлы. Она примет значение 0, и это не зависит от порядка написания имён файлов.

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

И, конечно, результаты поиска можно перенаправить в файл:

Как видите, команда where это довольно мощный инструмент для поиска файлов в Windows.

Оцените статью