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

106

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?

    
por David.Chu.ca 30.09.2009 / 19:06

10 respostas

5

Acho que você pode estar pensando no comando which no Linux.

$ which bash
/bin/bash

Não conheço uma ferramenta equivalente no Windows.

EDIT: Acabei de lembrar que há um pacote chamado Unix Utils para Windows que forneceria essa funcionalidade para você.

    
por 30.09.2009 / 19:11
260

De acordo com a resposta do StackOverflow em existe um equivalente de 'que 'on windows? , where.exe faz isso no Windows 7 e no Windows Server 2003 e versões posteriores:

Exemplo

C:\> where ping

Saída:

C:\Windows\System32\PING.EXE
    
por 24.06.2012 / 13:41
14

EDIT: 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. É onde "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>

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.

Assim, 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 somente na variável do caminho de comando, poderá 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 precisam ser especificados exatamente ou com curingas.

Tome 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 oferece:

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

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

    
por 27.09.2012 / 03:23
8

use dir :

cd \
dir /s /b mytool.exe

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

    
por 30.09.2009 / 19:15
4

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
    
por 07.04.2014 / 14:52
3

Frustrando que não é um comando simples.

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

Crie um arquivo em lote (which.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 

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.

Em seguida, execute-o como which cmd.exe para localizar o cmd.exe que será executado se você digitar cmd .

    
por 30.09.2009 / 20:23
3

No Windows, você pode usar o utilitário gratuito Todo o mecanismo de pesquisa para pesquisar instantaneamente para qualquer arquivo por completo ou nome parcial (se o seu disco rígido estiver formatado em ntfs).

    
por 30.09.2009 / 21:26
1

No PowerShell

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

Você pode converter isso facilmente em um Cmdlet.

    
por 21.09.2015 / 19:59
0

Se você precisar apenas do caminho para iniciá-lo, geralmente é melhor usar o comando start. Por exemplo, você pode usar "start chrome.exe" para iniciar o Chrom {e | ium}, independentemente de onde ele esteja instalado.

    
por 24.04.2013 / 18:35