Начиная с Windows 7 в операционных системах от Microsoft можно использовать команду WHERE, чтобы найти нужные файлы.
Синтаксис команды where выглядит следующим образом:
WHERE [/R каталог_для_поиска] [/Q] [/F] [/T] [шаблон_для_поиска]
Разберём используемые в команде параметры.
R — рекурсивный поиск и отображение файлов, соответствующих указанному шаблону, начиная с указанного каталога;
Q — возврат только кода выхода без отображения списка найденных файлов («тихий режим»);
F — отображение имён найденных файлов в кавычках;
T — отображение размера, даты и времени изменения найденных файлов.
Пользоваться командой where просто. Но учитывайте, что нужно указывать расширение искомого файла. Либо использовать *, чтобы команда нашла файлы всех расширений с подобным именем.
Обратите внимание на скриншот ниже. Шаблона test команде where оказалось недостаточно. А вот когда мы написали test*, команда поняла, что после test может быть что угодно, в том числе и любое расширение.
Продолжаем. Вводим команду
where /t test*
и видим информацию о размере, дате и времени редактирования файла. В данном случае наш файл пуст.
Обратите внимание, что по умолчанию (без параметра R) поиск осуществляется в текущем каталоге и каталогах, заданных значением переменной среды PATH.
Это значит, что если мы хотим поискать на всём диске C, нам необходимо использовать следующую конструкцию:
where /r c:\ file_test*
Как видите, поиск выдал нам расположение двух файлов, содержащих в имени file_test.
Если нам лучше известно местоположение искомого файла, мы можем сузить зону поиска, указав каталог:
where /r c:\mega file_test*
Конечно, мы можем поискать все файлы с одним определённым расширением:
where /r c:\mega *xlsx
Можно использовать знаки вопроса, которые означают, что символ может быть любым. Их отличие от звёздочки в том, что звёздочка не регламентирует число символов, а количество знаков вопроса строго увязано с числом символов.
Ниже пример: сперва мы использовали конструкцию ??le_test*, и команда поняла, что первые два символа могут быть любыми, потом должно идти «le_test», а дальше любые символы. Под этот шаблон подходит file_test.xlsx. А вот под шаблон ?le_test* он уже не подходит. Так как в этом шаблоне перед «le_test» стоит всего один любой символ.
Может ли шаблон содержать сразу несколько разных имён файлов или несколько разных расширений? Может! Как видно на скриншоте ниже, сначала мы поискали файлы с расширениями .xlsx и .txt, а затем файлы, в имени которых содержится file_test или test. В обоих случаях команда where нашла такие файлы.
Пример использования параметра F (добавляет кавычки):
where /f /r c:\mega file_test* test*
Пару слов о параметре Q. Как уже было сказано, он используется для того, чтобы не отображать месторасположение файлов. При использовании параметра Q команда where просто выведет результаты поиска — найдены искомые файлы или нет. Для вывода результата команда использует переменную ERRORLEVEL, которая может принимать три значения:
0 — искомые файлы найдены;
1 — искомые файлы не найдены;
2 — во время поиска произошла ошибка.
Как видите, файл test.txt в каталоге c:\mega есть, а файла test.pdf нет.
Возможно, кому-то станет интересно, какое значение примет переменная ERRORLEVER, если одновременно поискать присутствующий и отсутствующий файлы. Она примет значение 0, и это не зависит от порядка написания имён файлов.
Обычно параметр Q используют в командных файлах, когда в зависимости от результатов поиска нужно выполнить то или иное действие.
И, конечно, результаты поиска можно перенаправить в файл:
where /r c:\ file_test* > c:\search_results.txt
Как видите, команда where это довольно мощный инструмент для поиска файлов в Windows.
Статьи по теме: