2009-09-30 17:06:38 +0000 2009-09-30 17:06:38 +0000
174
174

Как найти местоположение исполняемого файла в Windows?

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

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

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

Ответы (12)

380
380
380
2012-06-24 11:41:10 +0000

Согласно ответу StackOverflow на Is there an equivalent of ‘which’ on windows? , where.exe делает это на Windows 7 и Windows Server 2003 и более поздних версиях:

Пример

C:\> where ping

Выход:

C:\Windows\System32\PING.EXE

В powershell используйте where.exe, Get-Command (или его аббревиатуру gcm), поскольку where является псевдонимом по умолчанию для Where-Object.

23
23
23
2012-09-27 01:23:30 +0000

EDIT: Я должен был добавить, если вы не можете использовать команду WHERE из командной строки, проверьте переменную PATH. (Просто используйте команду “путь”.) Убедитесь, что C:\Windows\System32 находится в вашем пути. Вот где находится “where.exe”.

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

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

WHERE <file>

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

Это отличается от команды “locate” тем, что она не просматривает всю файловую систему. Вместо этого, поведение по умолчанию заключается в поиске файлов в двух местах:

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

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

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

WHERE "$path:<search text>"

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

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

Наконец, ГДЕ вы найдете команды и любые файлы с расширением из переменной 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. (Замечание: “Где dxdiag” тоже сработало бы, потому что C:\Windows\System32 находится в переменной PATH.)

WHERE /R C:\Windows dxdiagn

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

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

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

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

Для получения дополнительной информации используйте “WHERE /?”. Надеюсь, это поможет!

10
10
10
2009-09-30 17:15:31 +0000

использовать dir:

cd \
dir /s /b mytool.exe

cd использоватьdir`:

cd \
dir /s /b mytool.exe

часть &007 изменяет корень диска, чтобы поиск начинался с верхней части иерархии.

9
9
9
2014-04-07 12:52:13 +0000

Обратите внимание, что для 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
``` некоторые вещи могут быть немного другими.
3
3
3
2009-09-30 19:26:11 +0000

В окнах вы можете использовать бесплатную утилиту Everything search engine для поиска instantly любого файла по полному или частичному имени (если ваш жесткий диск отформатирован в ntfs).

3
3
3
2009-09-30 18:23:36 +0000

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

Тем не менее, есть несколько решений, одно из которых batch файл.

Создать пакетный файл (который. 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.

1
1
1
2015-09-21 17:59:01 +0000

I

1
1
1
2009-09-30 17:19:01 +0000

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

0
0
0
2020-01-19 15:42:25 +0000

Для меня, что работало

Get-Command chromedriver

, который возвращает что-то вроде

CommandType Name Version Source
----------- ---- ------- ------
Application chromedriver.exe 0.0.0.0 C:\WINDOWS\chromedriver.exe

Просто замените chromedriver на программу, которую вы ищете.

0
0
0
2019-10-08 11:40:42 +0000

Хех, мне просто нужно поместить этот пакетный liner-файл Windows:

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

Тест:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\ssh.EXE

Не совсем один liner, если вы обернете код в setlocal enableextensions и endlocal, которые требуются для пользователей, у которых по умолчанию не включено расширение.

0
0
0
2019-12-04 17:04:50 +0000

Если вы используете Powershell, where - это нечто совершенно другое, чем команда где.

В powershell, введите:

(Get-Command -powershell.exe).Path
0
0
0
2013-04-24 16:35:10 +0000

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

Похожие вопросы

3
19
10
28
6