Команда WHERE — поиск файлов по шаблону имени.
Команда WHERE используется для определения расположения файлов в каталогах операционных систем Windows 7 и старше, имена которых соответствуют задаваемому шаблону поиска, а также, при необходимости — размера, даты и времени их изменения. По умолчанию поиск выполняется в текущем каталоге и в каталогах, определяемых значением переменной среды PATH .
Формат командной строки:
WHERE [/R каталог] [/Q] [/F] [/T] шаблон.
Параметры командной строки:
/R — Рекурсивный поиск и отображение файлов, соответствующих указанному шаблону, начиная с указанного каталога.
/Q — Возврат только кода выхода без отображения списка найденных файлов (тихий режим)
/F — Отображение имен найденных файлов в кавычках.
/T — Отображение размера, даты и времени изменения для всех найденных файлов.
шаблон — Шаблон поиска для искомых файлов. В шаблоне можно использовать подстановочные знаки * и ?. Также можно задавать конструкции «$пер:шаблон» и «путь:шаблон», где «пер» представляет переменную среды, и поиск осуществляется по путям, указанным в переменной среды «пер». Эти конструкции не следует использовать с параметром /R. При поиске к шаблону также добавляются расширения из переменной PATHEXT. Пример: WHERE «c:\windows;c:\windows\system32:*.dll»
/? — Вывод справки по использованию.
WHERE.EXE возвращает код ошибки 0, если поиск был успешным, 1 — если безуспешным, и 2, если возникли ошибки.
Примеры использования команды WHERE.
WHERE /? — выдать краткую справку по использованию команды.
WHERE myfile.doc — найти расположение файла myfile.doc . Поиск выполняется в текущем каталоге и каталогах, имена которых задаются значением переменной PATH
WHERE /T myfile.doc — то же, что и в предыдущем случае, но в результатах поиска отображается размер, дата и время изменения файла.
WHERE /R C:\ myfile.doc — найти расположение файла myfile.doc . Поиск выполняется рекурсивно, начиная с корневого каталога диска C: ( поиск по всему диску C: )
WHERE /R %windir%\system32 *.log — поиск файлов с расширением log начиная с подкаталога system32 системного каталога Windows.
WHERE /R %windir%\system32 *.log > loglist.txt — поиск файлов с расширением log начиная с подкаталога system32 системного каталога Windows с записью результатов в текстовый файл loglist.txt текущего каталога.
WHERE /R C:\ . dir.* — поиск с использованием шаблона, где первые 3 символа имени файла могут быть любыми ( . , следующие 3 символа принимают значение dir и с любым расширением.
where /R C:\windows\system32 *7*.exe — поиск исполняемых файлов, в имени которых содержится символ «7» , начиная с каталога C:\windows\system32
WHERE /R c:\windows *.vbs *.cmd *.bat — поиск файлов сценариев ( скриптов ) — файлов с расширением vbs , cmd и bat начиная с каталога C:\windows
WHERE /Q file1.ext — не отображать результат поиска. При выполнении этой команды будет установлено значение переменной ERRORLEVEL в зависимости от результата поиска:
ERRORLEVEL=0 — файл file1.ext найден.
ERRORLEVEL=1 — файл file1.ext не найден.
ERRORLEVEL=2 — при поиске файла file1.ext возникла ошибка.
Обычно команда WHERE /Q используется в командных файлах, когда в зависимости от результата поиска заданного файла нужно выполнить ту или иную подпрограмму.
Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой «Поделиться»
Поиск файлов в командной строке Windows
Начиная с Windows 7 в операционных системах от Microsoft можно использовать команду WHERE, чтобы найти нужные файлы.
Синтаксис команды where выглядит следующим образом:
WHERE [/R каталог_для_поиска] [/Q] [/F] [/T] [шаблон_для_поиска]
Разберём используемые в команде параметры.
R — рекурсивный поиск и отображение файлов, соответствующих указанному шаблону, начиная с указанного каталога;
Q — возврат только кода выхода без отображения списка найденных файлов («тихий режим»);
F — отображение имён найденных файлов в кавычках;
T — отображение размера, даты и времени изменения найденных файлов.
Пользоваться командой 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.
Поиск файлов через командную строку Windows (один из способов)
Приветствую, уважаемые участники проекта Habrahabr. Сегодня я хочу рассказать вам как выполнить поиск файлов в интерпретаторе командной строки Windows — cmd.exe. Я не буду вам писать такую команду, как dir или find. Мы сегодня рассмотрим другой, более лучший способ.
Давайте представим такую ситуацию: «Вы начинающий программист, и вам стоит задача: Сделать импорт всех (или некоторых файлов) из определенного каталога. Причем, чтобы можно было искать любые файлы, с любым названием и расширением. При этом импорт должен быть помещен в один файл. С сохранением всех путей файлов, построчно».
Вот как будет выглядеть данный код:
А теперь, давайте разберем, что он делает!
Первая строка кода:
Скрывает все происходящее в командном файле, и параллельно меняет заголовок командной строки.
Вторая строка кода:
Выводит статус операции.
Третья строка кода:
Иницилизация цикла For.
Четвертая строка кода:
Иницилизация цикла If.
Пятая строка кода:
Условие если файл найден.
Восьмая строка кода:
Очистка крана, и вывод конечного сообщения об окончании операции.
Девятая строка кода:
Пауза, перед закрытием пакетного файла и запуск файла с результатами.
Выводы
Условия поиска нужно вводить вручную, и путь где искать
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
- 22 марта 2021 в 00:07 ТОП 13 ошибок в поиске ключевых слов SEO, которых вы должны избегать
- 18 ноября 2020 в 12:57 Делаем скриншоты с автоматическим перебрасыванием на поиск изображения в Яндекс/Гугл
- 20 февраля 2021 в 23:47 Свободное API для поиска в интернете
- 4 марта 2021 в 16:42 Небольшой скрипт на python для поиска ошибок
- 10 апреля 2021 в 00:49 Поиск максимальной повторяющейся подстроки в символьной строке с помощью SQL
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
Не надо пропускать:
- рекламные и PR-публикации
- вопросы и просьбы (для них есть Хабр Q&A);
- вакансии (используйте Хабр Карьеру)
- статьи, ранее опубликованные на других сайтах;
- статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
- жалобы на компании и предоставляемые услуги;
- низкокачественные переводы;
- куски программного кода без пояснений;
- односложные статьи;
- статьи, слабо относящиеся к или не относящиеся к ней вовсе.
Утилита 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. Для этого пропишем:
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.
Спасибо за внимание. Автор блога Владимир Баталий