Please try the following commands
List all files in the current directory & subdirectories
dir /b/s *.txt
The above command searches for all txt file in the directory tree.
But as windows is started naming directories as
.nuget
,.vscode
it also comes with the command above.
In order to avoid this and have a clean list use /a:-d
filter as
dir /a:-d /b/s
Before using it just change the directory to root using
cd/
There is one more hacky command to do the same
for /r %f in (*) do @echo %f
Note: If you miss the
@echo
part in the command above it will try to execute all the files in the directories, and the/r
is what making it recursive to look deep down to subdirectories.
Export result to text file
you can also export the list to a text file using
dir /b/s *.exe >> filelist.txt
and search within using
type filelist.txt | find /n "filename"
If you are looking for files with special attributes, you can try
List all Hidden Files
dir /a:h-d /b/s
List all System Files
dir /a:s-d /b/s
List all ReadOnly Files
dir /a:r-d /b/s
List all Non Indexed Files
dir /a:i-d /b/s
If you remove the -d
from all commands above it will list directories too.
Using where
in windows7+:
Although this dir command works since the old dos days but Win7 added something new called Where
where /r c:\Windows *.exe *.dll
will search for exe & dll in the drive c:\Windows as suggested by @SPottuit you can also copy the output to the clipboard with
where /r c:\Windows *.exe |clip
just wait for the prompt to return and don’t copy anything until then.
Page break with more
If you are searching recursively and the output is big you can always use more
to enable paging, it will show -- More --
at the bottom and will scroll to the next page once you press SPACE
or moves line by line on pressing ENTER
where /r c:\Windows *.exe |more
For more help try
where/?
Please try the following commands
List all files in the current directory & subdirectories
dir /b/s *.txt
The above command searches for all txt file in the directory tree.
But as windows is started naming directories as
.nuget
,.vscode
it also comes with the command above.
In order to avoid this and have a clean list use /a:-d
filter as
dir /a:-d /b/s
Before using it just change the directory to root using
cd/
There is one more hacky command to do the same
for /r %f in (*) do @echo %f
Note: If you miss the
@echo
part in the command above it will try to execute all the files in the directories, and the/r
is what making it recursive to look deep down to subdirectories.
Export result to text file
you can also export the list to a text file using
dir /b/s *.exe >> filelist.txt
and search within using
type filelist.txt | find /n "filename"
If you are looking for files with special attributes, you can try
List all Hidden Files
dir /a:h-d /b/s
List all System Files
dir /a:s-d /b/s
List all ReadOnly Files
dir /a:r-d /b/s
List all Non Indexed Files
dir /a:i-d /b/s
If you remove the -d
from all commands above it will list directories too.
Using where
in windows7+:
Although this dir command works since the old dos days but Win7 added something new called Where
where /r c:\Windows *.exe *.dll
will search for exe & dll in the drive c:\Windows as suggested by @SPottuit you can also copy the output to the clipboard with
where /r c:\Windows *.exe |clip
just wait for the prompt to return and don’t copy anything until then.
Page break with more
If you are searching recursively and the output is big you can always use more
to enable paging, it will show -- More --
at the bottom and will scroll to the next page once you press SPACE
or moves line by line on pressing ENTER
where /r c:\Windows *.exe |more
For more help try
where/?
- 01.02.2020
- 12 250
- 0
- 04.08.2021
- 10
- 10
- 0
- Содержание статьи
- Описание
- Синтаксис
- Параметры
- Примечания
- Примеры
- Справочная информация
- Добавить комментарий
FIND — Поиск заданной строки текста в файле или нескольких файлах.
Описание
После поиска в заданных файлах команда find выведет на экран все строки из этих файлов, содержащие заданный образец.
Синтаксис
find [/v] [/c] [/n] [/i] "строка" [[диск:][путь]ИмяФайла[...]]
Параметры
Параметр | Описание |
---|---|
/v | Выводит все строки, не содержащие строку, заданную параметром строка |
/c | Подсчет строк, содержащих строку, указанную параметром строка, и отображение общего количества |
/n | Выводит номера строк перед самими строками |
/i | Задает поиск без различия строчных и заглавных букв |
«строка_поиска» | Обязательный параметр. Указывает группу символов, поиск которой будет производиться. Необходимо заключить параметр строка в кавычки («строка») |
[диск:][путь] ИмяФайла | Задает местоположение и имя файла, в котором будет производиться поиск заданной строки символов |
/? | Отображение справки в командной строке |
Примечания
- Если ключ /i не указан, команда find ищет именно то, что указано в параметре строка. Например, для команды find символы «a» и «A» являются различными. Если используется ключ /i, команда find не различает строчные и прописные буквы, и символы «a» и «A» являются одинаковыми.
- Если строка поиска содержит кавычки, при вызове команды каждая кавычка в строке поиска должна быть заменена двумя символами кавычек («СтрокаСодержания»»Кавычки»).
- Если имя файла пропущено, find действует как фильтр, получая ввод из стандартного источника вывода (обычно клавиатура, канал или файл перенаправления), и выводит все строки, содержащие параметр строка.
- Параметры и ключи команды find могут быть заданы в произвольном порядке.
- Подстановочные знаки (* и ?) не могут быть использованы в именах файлов и расширениях, задаваемых в команде find. Чтобы искать строку в множестве файлов, указанных с помощью подстановочных знаков, можно использовать команду find в команде for.
- Если в одной команде заданы ключи /c и /v, команда find выведет на экран количество строк, которые не содержат заданную строку поиска. Если в одной команде указаны оба ключа: /c и /n, команда find игнорирует ключ /n.
- Команда find не распознает символ перевода строки. Когда команда find используется для поиска текста в файле, который содержит символы перевода строки, необходимо ограничить строку поиска текстом, который может быть найден между символами перевода строки (строка не может прерываться символом перевода строки). Например, find не найдет совпадение для строки «файл налогов» если перевод строки в файле стоит между словами «файл» и «налогов».
Примеры
Для вывода всех строк из файла Pencil.ad, которые содержат слова «Точилка» служит следующая команда:
find "Точилка" pencil.ad
Для поиска строки, содержащей текст, указанный в кавычках, необходимо сначала заключить в кавычки всю строку. Во-вторых, необходимо использовать двойные кавычки для каждых кавычек, содержащихся в строке. Для поиска фразы «Точилка» (именно с ковычками в файле Pencil.ad:
find ""Точилка"" pencil.ad
Если поиск требуется провести в нескольких файлах, следует использовать команду find с командой for. Для поиска файлов с расширением .bat, содержащих строку «PROMPT», можно использовать следующую команду:
for %f in (*.bat) do find "PROMPT" %f
Для поиска на жестком диске C файлов, содержащих строку «CPU» и отображения их имен используйте символ канала (|), чтобы направить результаты команды dir в команду find:
dir c:\ /s /b | find "CPU"
Так как команда find проводит поиск, различая строчные и заглавные буквы, а команда dir выводит результаты заглавными буквами, необходимо задать строку «CPU» заглавными буквами или использовать ключ /i в команде find.
Справочная информация
На чтение 6 мин Просмотров 1.6к. Опубликовано
В этой статье мы с вами рассмотрим утилиту findstr и find командной строки, которые позволяет производить поиск строк в текстовом документе. Поиск через командную строку можно также настроить, используя шаблоны, которые настраиваются на основе регулярных выражений, но сперва, немного лирики…
В былые времена, когда я был еще полным чайником в компьютерах, мне пришлось услышать про волшебные “виртуальные диски”. В то время размер моего винчестера составлял 2 гигабайта, и на счету был каждый байт, я каждую картинки сжимал для экономии места, зато в системе был один фильм и одна игра “Age Of Empires 2”, я ее уже раз сто проходил. Так вот, я почему то решил, что “виртуальный диск”, это дополнительная память, которая может появится из воздуха… Где то два дня пытался всячески установить через Диспетчер устройств еще один винт на 500 метров, при том, что такого оборудования в системном блоке и подавно не было…
Утилита find командная строка
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «искомые_значения» [[диск:][путь]имя_файла[ …]]
И так, смотрим на описание ключей:
[/V] – произвести вывод всех строк, которые НЕ содержат заданной.
[/C] – выводится только общее число строк, содержащих заданную.
[/N] – Вывод номеров отображаемых строк.
[/I] – Поиск без учета регистра символов.
[/OFF[LINE]] – Не пропускать файлы с установленным атрибутом «Автономный».
«искомые_значения» – собственно, строчка, поиск которой производится из командной строки Windows
[[диск:][путь]имя_файла[ …]] – тут мы прописываем один или несколько имен документов, в которых нужно произвести поиск через командную строку, можно использовать подстановочные знаки.
Хорошо, теперь давайте попробуем написать несколько примеров.
Создадим на диске D: папку TEST, в который благополучно поместим три файла с расширениями .pdf, .txt и .mf. Для начала попробуем найти слово «const» во всех документах с расширением txt:
FIND «const» D:TEST*.txt
На выходе мы получим следующую информацию:
———- D:TESTSEND_MAIL_DATA.VBS.TXT
соnst toMSg =»to@yandex.ru» ‘получатель
соnst fromMSg =»from@gmail.com» ‘отправитель
соnst subjMsg = «Администратор» ‘субъект
соnst sndUsr =» login» ‘логин
соnst sndPswd =»password» ‘пароль
cоnst smtpSrvr = «smtp.gmail.com» ‘почтовый сервер
———- D:TESTSEND_MAIL_TEXT.VBS.TXT
cоnst toMSg =»to@yandex.ru»
cоnst fromMSg =»from@gmail.com»
cоnst subjMsg = «Администратор»
cоnst sndUsr =» login»
сonst sndPswd =»password»
сonst smtpSrvr = «smtp.gmail.com»
———- D:TESTSUBDOMEN_SCAN.WSF.TXT
Как видим, мы получили список всех тех строчек, где встречается искомое слово.
Теперь попробуем сделать поиск через командную строку слова “samsung” во всех pdf файлах:
FIND «samsung» D:TEST*.pdf
Слово «samsung» встречается в одном документе, но, утилита FІND найти его не смогла, стоит обратить внимание, что и стандартный поиск операционной системы Windows также ничего не нашел, видимо, Google в этом все же больше преуспел.
Теперь попробуем усложнить задачу. Дело в том, что Windows ищет фразу не только в контексте файла, но и в его свойствах. Посмотрим, будет ли утилита find командной строки Windows производить поиск из описания. Я специально, по одному из каждого типа файлов (.pdf, .txt и .mf) вставлю в описание фразу «Victoria Sanremo». И так, приступим:
FIND «Victoria Sanremo» D:TEST*.*
В результат выполнения команды find, командная строка ничего не нашла в свойствах документов. Кроме утилиты FІND, есть еще и CMD FINDSTR, которая обладает немного большими возможностями.
Утилита FINDSTR командная строка
Утилита CMD FINDSTR предоставляется возможность осуществить поиск текста через командную строку не только в одном файле, или группе документов заданных по шаблону, но и с возможностью загрузки готового списка. И так, прежде всего, давайте посмотрим на основной синтаксис.
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл][/C:строчка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]] «искомые_значения»[[диск:][путь]имя_файла[ …]]
/B – Данный ключ определяет поиск образца лишь в началах строчек.
/E — Данный ключ определяет поиск образца лишь в конце.
/R – Фразы и слова будут приниматься как регулярные выражения.
/S – Производит поиск файлов через командную строку в текущем каталоге и всех его подпапках.
/I – Данный ключ определяет, что поиск фразы из командной строки будет вестись без учета регистра.
/X – Производит вывод только тех строчек, которые содержат точное совпадение.
/V — Производит вывод только тех строчек, которые не содержат точного совпадения с искомой фразой.
/N — Производит вывод номера строчки (которые содержат точное совпадение) и ее содержимое.
/M — Производит вывод лишь имени документа, который содержит совпадение.
/O – Вывести список найденных строк через пустую строчку.
/P – Данный параметр определяет, что произойдет пропуск всех строк, которые содержат непечатаемые символы.
/OFF[LINE] — Не пропускает те документы, у которых установлен атрибут «Автономный».
/A:цвета – Шестнадцатеричный код цвета, для получения справки можете ввести команду «COLOR /?»
/F:файл – Производит чтение списка файлов из заданного документа.
/C:строчка – Использовать значение данного параметра как искомую фразу поиска.
/G:файл – Позволяет получить список строк из заданного документа.
/D:список_папок – Тут через точку с запятой мы можем задать список каталогов, в которых нужно произвести поиск через командную строку.
“искомые_значения” – Собственно, то, что мы ищем.
[диск:][путь]имя_файла — Задаем путь к документу (документам)
Что бы разделить между собой искомые фразы, между ними вставляется пробел, если параметр не содержит префикса /C. Например,
FINDSTR «Привет мир» data.txt
ищет «Привет» или «мир» в файле data.txt, а команда
FINDSTR /C:»Привет мир» data.txt
ищет фразу «Привет мир» в файле data.txt.
Регулярные выражения являются своеобразным бонусом, которым не то, что оболочка, но и язык программирования не всегда может похвастаться. При поиске из командной строки, регулярные выражения позволяют задавать собственные шаблоны (для справки по некоторым значениям введите в cmd findstr/? ), они также используются в сценариях сервера Windows Script Host, за это отвечает отдельный объект.
Недавно мы рассматривали поиск файлов через командную строку Windows. Сегодня поговорим о том, как найти внутри файлов нужный нам текст. Сделать это можно при помощи команды FIND.
Команда find сообщает имена файлов, в которых был найден искомый файл, и выводит строки, в которых он содержится.
Синтаксис команды find:
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «искомый_текст» [путь_к_файлу]
V — вывод всех строк, НЕ содержащих искомый текст;
C — вывод только общего числа строк, содержащих искомый текст;
N — вывод номеров строк;
I — поиск без учёта регистра символов;
OFF[LINE] — не пропускать файлы с атрибутом «автономный».
Для примера проверим все текстовые файлы в каталоге C:\test\ на наличие слова «текст».
find c:\test\*.txt "текст"
Если посмотреть на скриншот ниже, то можно подумать, что ни один из файлов не содержит слова «текст». Конечно, это вполне допустимый вариант. Но есть и другое объяснение.
Дело в том, что по умолчанию текст в командной строке Windows отображается согласно кодовой странице CP866, а в файлах он в кодовой странице CP1251. Поэтому нам достаточно сменить кодовую страницу в текущем окне командной строки. О том, как это сделать, можно прочитать в статье по этой ссылке.
Теперь мы видим, что слово «текст» встречается во всех трёх файлах.
Теперь посмотрим на строки, в которых нет слова «текст»:
find /v c:\test\*.txt "текст"
Такие оказались только в файле FILE_1.TXT.
Помните, что команда find по умолчанию учитывает регистр. Поэтому, написав в ней «Текст», мы не найдём подобного слова в файлах. Но регистр можно и проигнорировать:
find /i c:\test\*.txt "Текст"
На скриншоте ниже хорошо видно, что сперва команда не нашла слова «Текст» в файлах, так как в них оно записано без заглавных букв. Добавив /i, мы это исправили.
Допустим, нам нужно знать порядковые номера строк, в которых отсутствует слово «текст»:
find /v /n c:\test\*.txt "текст"
Если мы захотим знать число строк, в которых присутствует искомое слово, тогда выполним команду:
find /c c:\test\*.txt "текст"
А если нам нужно знать число строк, где это слово отсутствует, тогда пример команды такой:
find /v /c c:\test\*.txt "текст"
Хотя до этого в примерах мы искали отдельное слово, find спокойно ищет и выражения:
Особенностью команды find является то, что искомый текст обязательно нужно заключать в кавычки. Это приводит к трудностям, если в пути к файлам (и в именах файлов) содержится пробел. В таком случае нужно воспользоваться перенаправлением ввода, но только если мы ищем в конкретном файле.
find "строка" < "c:\test test\file_1.txt"
Как видите, наличие пробела в имени каталога C:\test test\ не помешало осуществить поиск. Но это что касается поиска в файле file_1.txt. А вот попытка поискать сразу во всех файлах привела к ошибке.
В таком случае можно воспользоваться циклическое обработкой, к примеру, командой for:
for %a in ("c:\test test") do find %a\*.txt "текст"
Помните, что в этом случае в командной строке нужно использовать конструкции вида %a, а в файлах .bat и .cmd вида %%a.
До этого в примерах мы всегда указывали в каких файлах искать. Если этого не сделать, то команда find выполняет поиск в тексте консоли или в тексте, который был передан по конвейеру другой командой.
Для следующего примера вернём кодовую страницу CP866. После этого отсортируем вывод команды ipconfig /all — оставим только те строки, где содержится слово «Состояние»:
ipconfig /all | find "Состояние"
Здесь мы лишь пробежались по вершинам, но возможности команды find гораздо больше. Особенно, если использовать её в комплексе с другими командами.