Questão Como faço para encontrar a localização de um executável no Windows?


Eu lembrei que usei uma ferramenta chamada where para encontrar locais para qualquer programa executável como este em um console:

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

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


104


origem


Várias respostas sobre Existe um equivalente de 'which' no windows? - estouro de pilha - Satanicpuppy
Se o aplicativo estiver em execução e você precisar saber sua localização, use o Process Explorer (da Sys Internals). - Ganesh R.
where funcionou para mim no Windows 7 Enterprise - Bohemian
PAGING OP: Por favor, atualize a resposta aceita :) - Jake
@ David.Chu.ca por favor, atualize a resposta aceita - Matt Frear


Respostas:


Eu acho que você pode estar pensando no qual comando no Linux.

$ which bash
/bin/bash

Não tenho conhecimento de uma ferramenta equivalente no Windows.

EDITAR: Eu acabei de lembrar que há um pacote chamado Utilitários Unix para o Windows que forneceria essa funcionalidade para você.


5



github.com/bmatzelle/gow/wiki é um descendente do Unix Utils que é mais conveniente de usar, chamado Gnu no Windows. Tem mais utilitários e um instalador. - Simon D
Droga, eu não posso fazer downvote. O OP estava certo e existe um "where.exe". Veja a resposta abaixo aqui: superuser.com/a/440904/59929 - Piers Karsenbarg
Queria fazer uma votação negativa aqui, mas a redação da pergunta faz com que esta seja uma resposta válida: I remembered that I used a tool...Now I cannot find this tool. Not sure if Windows has [it]. - Ben


De acordo com a resposta do StackOverflow em Existe um equivalente de 'which' no windows?, where.exe faz isso no Windows 7 e no Windows Server 2003 e posterior:

Exemplo

C:\> where ping

Saída:

C:\Windows\System32\PING.EXE

247



Isso deve ser considerado a resposta correta, pois funciona sem instalar software extra - Cookie
Uma parte importante desta resposta é que no powershell, where é um alias padrão para o Where-Object, então você precisa usar where.exeou gcm/Get-Command - Dave Andersen


EDITAR:  Eu deveria ter adicionado, se você não pode usar o comando WHERE no prompt de comando, verifique sua variável PATH. (Basta usar o comando "path"). Certifique-se de que C: \ Windows \ System32 esteja em seu caminho. É aí que "where.exe" está localizado.

ONDE é o comando que você está procurando! WHERE é como um cruzamento entre o shell interno do UNIX "which" e o comando "locate", que funciona tanto para arquivos executáveis ​​quanto para arquivos regulares.

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

WHERE <file>

vai funcionar.

É diferente do comando "locate", pois não está procurando em todo o sistema de arquivos. Em vez disso, o comportamento padrão é procurar arquivos em dois locais:

  • O diretório atual.
  • Todos os diretórios na variável PATH.

Portanto, qualquer comando que você possa executar diretamente de um prompt de comando sem especificar o diretório, será encontrado pelo comando WHERE. (Porque qualquer comando como esse já está na lista de variáveis ​​PATH.)

Se você quiser pesquisar  na variável do caminho de comando, você pode usar:

WHERE "$path:<search text>"

Se, por outro lado, você quiser encontrar todas as cópias de um arquivo em uma árvore de diretórios, você pode usar:

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

Finalmente, WHERE encontrará comandos e quaisquer arquivos com uma extensão da variável PATHEXT sem incluir a extensão. Todos os outros arquivos devem ser especificados exatamente ou com curingas.

Tomemos por exemplo os arquivos "dxdiag.exe" e "dxdiagn.dll". Observe o seguinte comando e 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 retornar todas as versões de "dxdiag.exe" porque ".exe" é uma das extensões na variável PATHEXT. (Nota: "WHERE dxdiag" teria funcionado bem, porque C: \ Windows \ System32 está na variável PATH).

WHERE /R C:\Windows dxdiagn

por outro lado, não retorna nenhum resultado, porque ".dll" é não em PATHEXT.

Nesse caso, observe o resultado que a adição de um caractere curinga nos fornece:

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 todos versões de dxdiagn.dll.

Para mais informações, use "WHERE /?". Espero que isto ajude!


13



where where  C:\Windows\System32\where.exe :) - vp_arth


usar dir:

cd \
dir /s /b mytool.exe

a cd \ parte muda você para a raiz da unidade, para garantir que a pesquisa comece no topo da hierarquia.


8



Parece fazer uma linha de comando do Windows Search. - Ganesh R.
Isso faz uma busca recursiva da unidade e levaria uma eternidade. - djhowell
A única maneira de encontrar executáveis ​​que AREN'T na variável de ambiente PATH é fazer isso. Ele nunca especificou seu caminho, ele disse qualquer executável. - John T
ele encontra o executável, mas demora um pouco. - Michael Z
isso, claro, só funciona se você souber o nome do executável ou pelo menos uma parte do nome - Oliver Williams


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

4





Frustrando que não é embutido como um simples comando.

No entanto, existem várias soluções, uma das quais é uma arquivo em lote.

Crie um arquivo em lotes (which.bat) da seguinte maneira:

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

Isso parece no diretório local, terá um parâmetro de nome de arquivo com ou sem uma extensão e retornará a primeira correspondência do diretório atual ou no PATH.

Então corra como which cmd.exe para encontrar o cmd.exe que será executado se você digitar cmd.


3





No windows você pode usar o utilitário gratuito Tudo mecanismo de busca procurar imediatamente para qualquer arquivo por nome completo ou parcial (se o seu disco rígido estiver formatado em ntfs).


3



Diferença de noite e dia entre esta e a pesquisa do Windows. - AnthonyVO


Se você quer apenas qual, a GnuWin32 O projeto tem vários utilitários unix com instaladores individuais.


1