Битлента
Сетевые команды и утилиты5 мин чтения·

where.exe: как найти путь к программе в Windows и понять, какая версия запустится

Команда where в Windows показывает, где лежит исполняемый файл и в каком порядке система ищет его по PATH. Ключи /R, /Q, /T и отличие от PowerShell.

Кратко

where имя показывает полные пути ко всем найденным файлам с таким именем: сначала в текущей папке, затем по каталогам из PATH. Первый результат обычно тот, который запустится. В PowerShell слово where занято, поэтому пишите where.exe.

Вопрос, на который отвечает команда

У вас установлено две версии одной программы, и непонятно, какая из них запускается по имени в консоли. Или команда «не найдена», хотя вы уверены, что программа стоит на компьютере. В обоих случаях помогает where: она ищет файл так же, как это делает командная строка, и выводит полные пути.

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

Команда входит в Windows и не требует установки. Права администратора не нужны, потому что она только читает пути и ничего не меняет.

Бывает и обратная ситуация: после установки новой версии в консоли всё ещё запускается старая. Where показывает оба файла, и сразу видно, что старый каталог стоит в PATH раньше нового. Исправлять это нужно порядком записей в переменной, а не повторной установкой.

Как Windows ищет исполняемые файлы

Когда вы вводите имя без пути, командная строка сначала смотрит в текущую папку, а затем по очереди перебирает каталоги из переменной окружения PATH. Каталоги разделяются точкой с запятой. Побеждает первое совпадение, поэтому порядок записей в PATH влияет на то, какая версия программы откроется.

Where повторяет эту логику. Поэтому она хорошо показывает случаи, когда в системе есть две копии, например установленная пользователем и поставляемая вместе с другим пакетом. Если первой в списке оказалась не та, поменяйте порядок каталогов в PATH или запускайте программу по полному пути.

Подробно о том, что такое PATH и почему система говорит, что команда не найдена, рассказано на отдельной странице раздела систем. Здесь важно лишь то, что where показывает результат поиска, не вникая в причины.

Расширения, которые командная строка подставляет к имени без суффикса, перечислены в переменной PATHEXT. Поэтому ввод имени без .exe, .cmd или .bat работает. Если два файла с одним именем и разными расширениями лежат в одной папке, запустится тот, чьё расширение стоит в PATHEXT раньше.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Ключи и шаблоны

Имя можно задавать с подстановочными знаками: звёздочка заменяет любое число символов, вопросительный знак один символ. Например, where *.exe покажет исполняемые файлы в текущей папке и каталогах из PATH.

ЗаписьЧто делает
where имяищет в текущей папке и по PATH
where /R C:\Tools имяищет рекурсивно, начиная с указанной папки
where /Q имяне печатает результат, только возвращает код завершения
where /F имявыводит пути в двойных кавычках
where /T имядобавляет размер файла и время изменения

Код завершения у where простой: 0 означает, что файл найден, 1 что не найден, 2 что произошла ошибка. Ключ /Q с проверкой кода пригоден для скриптов, которым нужно узнать, установлена ли программа, не засоряя вывод.

Для просмотра самого PATH в cmd достаточно ввести echo %PATH%, а в PowerShell выражение $env:Path. Если длинная строка нечитаема, замените в ней точки с запятой на переводы строк средствами текстового редактора: так проще заметить дубликаты и каталоги, которых уже не существует.

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

where в PowerShell: почему команда ведёт себя странно

В PowerShell слово where является псевдонимом командлета Where-Object, который фильтрует объекты в конвейере. Поэтому запись where python без дополнительных аргументов там не даст ожидаемого результата, а может вывести непонятное сообщение или ничего.

Чтобы вызвать именно программу, пишите where.exe python: с расширением. Так PowerShell запускает внешний файл, а не псевдоним. Результат будет таким же, как в классической командной строке.

  • Командная строка (cmd): where имя;
  • PowerShell: where.exe имя;
  • Get-Command имя в PowerShell покажет и командлеты, и программы, и псевдонимы, что полезно, если неясно, чем именно является имя.

Если нужны сведения о том, откуда запущен уже работающий процесс, используйте не where, а список процессов с путём к файлу.

Дополнительную пользу даёт Get-Command: в отличие от where.exe, он показывает тип найденного объекта (приложение, командлет, функция, псевдоним) и, для приложений, путь к файлу. Если нужно понять, чем является имя в PowerShell, начинайте с него.

Типичные сценарии и ограничения

Проверка установки: where git, where curl, where node. Если команда вернула путь, программа доступна из консоли. Если пишет, что не удалось найти файлы по заданным шаблонам, значит, в текущей папке и в PATH такого файла нет, хотя он мог быть установлен в каталог, не включённый в PATH.

Поиск по диску: where /R C:\ имя.ext ищет файл по всему диску, но на больших дисках это занимает заметное время и может натолкнуться на папки без прав доступа. Для обычного поиска файлов удобнее встроенный поиск проводника.

Where не знает о псевдонимах и функциях оболочки, а ищет только файлы. Поэтому если имя в консоли работает, а where его не находит, возможно, это внутренняя команда cmd (как dir или copy) или псевдоним PowerShell, а не отдельная программа.

Для сценариев удобно сочетание: where /Q имя && echo найдено || echo нет. Оно использует код завершения, о котором говорилось выше, и не требует разбирать текст вывода, а значит работает одинаково в разных языковых версиях Windows.

Результат команды полезно приложить к обращению в поддержку программы: по нему специалисту видно, какие копии установлены и откуда они запускаются.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
wherePATHwindowsкомандная строка

Часто задаваемые вопросы

Читайте также