it-swarm-ru.tech

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

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

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

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

128
David.Chu.ca

Я думаю, что вы, возможно, думаете о команде which в Linux.

$ which bash
/bin/bash

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

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

3
djhowell

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

Пример

C:\> where ping

Результат:

C:\Windows\System32\PING.EXE
301
Simon D

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

Где команда, которую вы ищете! WHERE - это нечто среднее между встроенной в UNIX Shell командой «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.

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

19
geo

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

cd \
dir /s /b mytool.exe

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

10
John T

Обратите внимание, что некоторые вещи могут немного отличаться для 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
7
Rob Jens

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

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

Создайте командный файл (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
b w

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

3
harrymc

В PowerShell

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

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

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

get-command notepad.exe | select Source
1
Anupam

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

1
Justin Love

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

0
Anonymous Coward