Windows equivalente de whereis?


164

Existe um equivalente ao comando whereix do Unix no Windows?

Para que eu pudesse descobrir onde estão os comandos que eu posso executar.

Respostas:


203

O comando where faz o que você deseja e volta pelo menos ao kit de recursos para Windows 98 e é incluído por padrão no Server 2003, Vista e mais recente:

C:\>where csc
C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe

Se executado sem argumentos (no Vista), resulta em uma das minhas mensagens favoritas:

C:\>where
ERROR: The operation completed successfully.

Se estiver executando no PowerShell, inclua '.exe' para diferenciar qualquer alias ou script de 'where' ao longo do caminho. ('where' é um alias típico para Where-Object.ps1)

C:\> where.exe where.exe
C:\Windows\System32\where.exe

4
Todos os dias eu aprendo algo novo ...
Rubens Mariuzzo

4
Meio triste whereapenas retorna uso ajuda agora no Windows 7. Queria ver por mim mesmo: p
Svish

2
wherenão disponível no XP
Tom Roggero 10/02

1
@ TomRoggero, eu poderia ter sido mais claro. Faz parte do kit de recursos opcional que começa no Windows 98 e está incluído apenas na instalação básica da versão após o XP.
Kevin

7

hackerish which.cmd:

@echo off
@set PATH=.;%PATH%

@rem 
@rem about:  something similar like the unix-alike-which, but with
@rem         within pure cmd
@rem 

if "%1" == "" (
    @echo Usage: 
    @echo.
    @echo   which 'cmd'
    @echo.
    @echo.if 'cmd' is not found, ERRORLEVEL is set to 1
    @echo.  
) else (
    ( @for %%f in (%1 %1.exe %1.cmd %1.bat %1.pif) do if not "%%~$PATH:f" == "" ( @echo %%~$PATH:f ) else @set ERRORLEVEL=1) 
)

1
Essa é uma boa correção para sistemas mais antigos, mas você deve saber que isso resulta em algumas peculiaridades. Ele corresponde aos diretórios, retorna apenas o primeiro resultado encontrado no caminho para cada extensão e deve incluir todas as extensões encontradas na variável de ambiente PATHEXT.
Kevin

yah, isso é um pouco mais velho truque da mina, quando eu colei aqui eu imediatamente viu o potencial para% PATHEXT% :)
akira

7

Por favor, use o comando where :

> where app.exe

É a melhor maneira de alcançar seu objetivo.

Você também pode usar o comando PowerShell:

> $env:path.Split(';') | gci -Filter app.exe

e versão expandida tem esta aparência:

 > $env:path.Split(';') | select -Unique | ? {$_ -and (test-path $_)} | gci -Filter app.exe

3

Em algum lugar "lá fora", encontrei este arquivo em lotes whereis.bat:

@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i

Atualização: talvez eu tenha encontrado aqui .



1
function find ($string) { 
   Get-ChildItem -Path 'c:\' -Recurse -Filter $string; 
}

function whereis ($string) { 
   $superpath = "$env:Path;C:\Program Files;C:\Program Files (x86)";
   (echo $superpath).Split(';') | Get-ChildItem -Recurse -Filter $string; 
}

Exemplo:

PS> encontrar Mozilla.admx

    Directory: C:\Windows\PolicyDefinitions                                                                                     

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        1/27/2016  12:22 PM          37146 Mozilla.admx                                                                   

PS> whereis firefox.exe

    Directory: C:\Program Files\Mozilla Firefox                                                                                 

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        9/21/2017   5:30 PM         477136 firefox.exe        

0

Eu estava procurando por isso hoje e, como estou no XP sem o kit de recursos, virei para o PowerShell com o seguinte comando:

dir -path c:\ -filter ffmpeg.* -r

Eu não sou proficiente em PowerShell, mas parece que você está pesquisando em toda a árvore de diretórios. Isso não é equivalente ao wherequal apenas pesquisas no %PATH%. Além disso, é muito mais lento e dá erros para pastas que você não tem permissão de leitura
phuclv

Concordo ... Eu não exigia uma cópia exata da funcionalidade, apenas a capacidade de localizar um programa.
precisa saber é o seguinte

-1

Você pode tentar procurar o comando usando o seguinte:

dir /s type-whatever-you-are-searching

Isso não funciona para mim. Por exemplo, o comando exp está no meu caminho, mas dir / s exp ou dir / s exp.exe apenas fornece "Arquivo não encontrado".
bobmcn

4
Isso funcionaria se: a) você pesquisasse a partir da raiz da unidade, b) seu caminho estivesse em uma unidade ec) seu caminho estivesse em ordem lexicográfica. Mesmo sob essas condições, será ridiculamente lento.
Kevin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.