117

Я вспомнил, что я использовал инструмент, называемый where найти места для любых исполняемых программ, таких как это в консоли:

 C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

Сейчас я не могу найти этот инструмент. Не уверены, есть ли в Windows встроенный инструмент для этого поиска?

10 ответов10

283

Согласно ответу StackOverflow на Есть ли эквивалент «который» в Windows?, where.exe делает это в Windows 7 и Windows Server 2003 и более поздних версиях:

пример

C:\> where ping

Выход:

C:\Windows\System32\PING.EXE
16

РЕДАКТИРОВАТЬ: я должен был добавить, если вы не можете использовать команду WHERE из командной строки, проверьте переменную PATH. (Просто используйте команду "путь".) Убедитесь, что C:\Windows\System32 находится на вашем пути. Вот где находится "where.exe".

Где команда, которую вы ищете! WHERE - это нечто среднее между встроенной в UNIX оболочкой "which" и командой "locate", поскольку она работает как с исполняемыми файлами команд, так и с обычными файлами.

Это также несколько сложнее, чем любой из этих двух, хотя, в общем, простой

WHERE <file>

буду работать.

Она отличается от команды "locate" тем, что не просматривает всю файловую систему. Вместо этого поведение по умолчанию - искать файлы в двух местах:

  • Текущий каталог.
  • Все каталоги в переменной PATH.

Таким образом, любая команда, которую вы можете запустить непосредственно из командной строки без указания каталога, будет найдена командой WHERE. (Потому что любая подобная команда уже есть в списке переменных PATH.)

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

WHERE "$path:<search text>"

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

WHERE /R <Top Level Directory> <search text>

Наконец, WHERE найдет команды и любые файлы с расширением из переменной PATHEXT, не включая расширение. Все остальные файлы должны быть указаны точно или с подстановочными знаками.

Возьмем, к примеру, файлы "dxdiag.exe" и "dxdiagn.dll". Обратите внимание на следующую команду и ее вывод:

WHERE /R C:\Windows dxdiag

C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe

Он успешно возвращает все версии "dxdiag.exe", потому что ".exe" является одним из расширений переменной PATHEXT. (Примечание: "WHERE dxdiag" также сработал бы, потому что C:\Windows\System32 находится в переменной PATH.)

WHERE /R C:\Windows dxdiagn

с другой стороны, не возвращает никакого результата, потому что ".dll" нет в PATHEXT.

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

WHERE /R C:\Windows dxdiagn*

C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll

Он успешно возвращает все версии dxdiagn.dll.

Для получения дополнительной информации используйте «ГДЕ /?». Надеюсь это поможет!

9

используйте dir:

cd \
dir /s /b mytool.exe

cd \ part изменяет вас в корень диска, чтобы гарантировать, что поиск начинается на вершине иерархии.

6

Обратите внимание, что некоторые вещи могут немного отличаться для PowerShell:

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe
6

Я думаю, вы можете подумать о том, какая команда в Linux.

$ which bash
/bin/bash

Я не знаю об эквивалентном инструменте в Windows.

РЕДАКТИРОВАТЬ: Я только что вспомнил, что есть пакет под названием Unix Utils для Windows, который предоставит вам эту функциональность.

3

Расстраивает, что это не встроенная простая команда.

Однако существует несколько решений, одним из которых является командный файл.

Создайте командный файл (which.bat) следующим образом:

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i 

Он просматривает локальный каталог, принимает параметр имени файла с расширением или без расширения и возвращает первое совпадение из текущего каталога или из переменной PATH.

Затем запустите его, например, which cmd.exe чтобы найти cmd.exe, который будет выполняться, если вы cmd .

3

В Windows вы можете воспользоваться бесплатной утилитой « Поисковая система« Все » для мгновенного поиска любого файла по полному или частичному имени (если ваш жесткий диск отформатирован в ntfs).

1

В PowerShell

(@($env:path.split(";")) + (pwd).Path)  | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

Вы можете легко преобразовать это в командлет.

Другой способ сделать это, как предложено в редактировании:

get-command notepad.exe | select Source
1

Если вы просто хотите что, у проекта GnuWin32 есть куча утилит unix с отдельными установщиками.

0

Если вам просто нужен путь для его запуска, часто лучше использовать команду запуска. Например, вы можете использовать «start chrome.exe» для запуска Chrom {e | ium}, независимо от того, где он установлен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .