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

Como encontro a localização de um executável no Windows?

Lembrei-me que usei uma ferramenta chamada where para encontrar a localização de qualquer programa executável como este numa consola:

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

Agora não consigo encontrar esta ferramenta. Não tem a certeza se o Windows tem uma ferramenta integrada para fazer essa pesquisa?

Respostas (12)

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

De acordo com a resposta do StackOverflow em Existe um equivalente a “qual” no Windows? , where.exe faz isto no Windows 7 e Windows Server 2003 e posteriores:

Exemplo

C:\> where ping

Output:

C:\Windows\System32\PING.EXE

Em powerhell use where.exe, Get-Command (ou a sua abreviatura gcm), uma vez que where é o nome por defeito para Where-Object.

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

EDIT: Eu deveria ter adicionado, se você não pode usar o comando ONDE do prompt de comando, verifique sua variável PATH. (Basta usar o comando “path”.) Certifique-se que o C:\Windows\System32 está no seu caminho. É aí que se encontra “where.exe”.

WHERE é o comando que procura! WHERE é como uma cruz entre a shell UNIX embutida no comando “which” e o comando “locate”, na medida em que funciona tanto para executáveis de comandos como para ficheiros normais.

Também é um pouco mais complexo do que qualquer um desses dois, embora, em geral um simples

WHERE <file>

funcione.

É diferente do comando “locate” na medida em que não está a procurar em todo o sistema de ficheiros. Em vez disso, o comportamento padrão é procurar ficheiros em dois locais:

  • O directório actual.
  • Todos os directórios na variável PATH.

Assim, qualquer comando que possa correr directamente de um prompt de comando sem especificar o directório, será encontrado pelo comando ONDE. (Porque qualquer comando como esse já está na lista de variáveis PATH.)

Se quiser pesquisar somente na variável caminho de comando, pode usar:

WHERE "$path:<search text>"

Se, por outro lado, quiser encontrar todas as cópias de um ficheiro numa árvore de directórios, pode usar:

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

Finalmente, ONDE encontrará comandos e quaisquer ficheiros com uma extensão da variável PATHEXT sem incluir a extensão. Todos os outros ficheiros têm de ser especificados exactamente ou com wildcards.

Tome por exemplo os ficheiros “dxdiag.exe” e “dxdiagn.dll”. Note o seguinte comando e a sua saída:

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

Ele consegue devolver todas as versões de “dxdiag.exe” porque “.exe” é uma das extensões da variável PATHEXT. (Nota: “ONDE dxdiag” também teria funcionado, porque C:\Windows\System32 está na variável PATH.)

WHERE /R C:\Windows dxdiagn

, por outro lado, não devolve nenhum resultado, porque “.dll” é não no PATHEXT.

Neste caso, veja o resultado que a adição de um wildcard nos dá:

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

Ele retorna com sucesso todas as versões da dxdiagn.dll.

Para mais informações, use “ONDE /?”. Espero que isto ajude!

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

use dir:

cd \
dir /s /b mytool.exe

a parte cd usedir`:

cd \
dir /s /b mytool.exe

a parte muda-o para a raiz da unidade, para garantir que a pesquisa começa no topo da hierarquia.

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

Note que algumas coisas podem ser um pouco diferentes para a 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

No windows você pode usar o utilitário gratuito Everything search engine para procurar instantly por qualquer arquivo pelo nome completo ou parcial (se o seu disco rígido estiver formatado em ntfs).

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

Frustrante que não esteja incorporado como um simples comando.

No entanto, existem várias soluções, uma das quais é um ficheiro batch.

Criar um ficheiro batch (que. bat) da seguinte forma:

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

Este procura no directório local, vai pegar num parâmetro de nome de ficheiro com ou sem extensão, e devolver a primeira correspondência do directório actual ou no PATH.

Depois execute-o como which cmd.exe* para encontrar o cmd.exe que será executado se escrever cmd.

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

Em PowerShell

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

Pode facilmente converter isto num Cmdlet.

Outra forma de o conseguir, como sugerido numa edição:

get-command notepad.exe | select Source
1
1
1
2009-09-30 17:19:01 +0000

Se apenas pretende que , o projecto GnuWin32 tem um monte de unix utils com instaladores individuais.

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

Para mim, o que funcionou foi

Get-Command chromedriver

que devolve algo como

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

Simplesmente substitua chromedriver pelo programa que está à procura

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

Heh, só tenho de colocar este ficheiro de um liner batch do 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

Um teste:

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

Não é bem um liner de um liner se embrulhar o código em setlocal enableextensions e endlocal, que são necessários para os utilizadores que não têm as extensões activadas por defeito.

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

Se está a usar Powershell, where é algo totalmente diferente dos cmd’s onde.

Em powerhell, tipo:

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

Se só precisa do caminho para o lançar, é muitas vezes melhor usar o comando de arranque. Por exemplo, você pode usar “start chrome.exe” para iniciar o Chrom{e|ium}, independentemente de onde ele está instalado.