Questão Equivalente Windows de whereis?


Existe um equivalente do Unix Onde é comando no Windows?

Assim, eu poderia descobrir onde os comandos que eu posso executar realmente são.


145


origem




Respostas:


o Onde comando faz o que você quer e volta pelo menos para o kit de recursos para o 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), isso resulta em uma das minhas mensagens favoritas:

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

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

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

173



Todos os dias aprendo algo novo ... - Rubens Mariuzzo
Meio triste where apenas retorna ajuda de uso agora no Windows 7. Queria ver por mim mesmo: p - Svish
where não disponível no XP - Tom Roggero
@ TomRoggero, eu poderia ter sido mais claro. É parte do kit de recursos opcional que começa com o Windows 98 e é incluído apenas na instalação básica da versão após o XP. - Kevin


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) 
)

6



Essa é uma boa solução para sistemas mais antigos, mas você deve saber que isso resulta em algumas peculiaridades. Ele corresponde a 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 hack meu, quando eu colei aqui eu instantaneamente vi o potencial para% PATHEXT% :) - akira


Por favor, use Onde comando:

> where app.exe

É a melhor maneira de alcançar seu objetivo.

Você também pode usar o comando do PowerShell:

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

e versão expandida se parece com isso:

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

6



Esta é a melhor resposta - skan


Em algum lugar "lá fora" eu encontrei este arquivo de lote whereis.bat:

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

Atualização: talvez eu achei Aqui.


2





Há pelo menos um Porta do Windows para o which utilidade.


1





Uma abordagem diferente (GUI), mas veja Tudo.


0



Isso é algo diferente. Definitivamente não ajuda você a responder a pergunta "qual executável é exatamente executado, quando executo o <comando> no diretório atual"e é isso que OP está pedindo. - Dawid Ferenczy


Eu estava procurando por isso hoje e desde que eu estou no XP sem o kit de recursos, eu voltei para o powershell com o seguinte comando:

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

0



Eu não sou proficiente em powershell, mas parece que você está procurando em toda a árvore de diretórios. Isso não é equivalente a where que apenas procura 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 exigi uma cópia exata da funcionalidade, apenas a capacidade de localizar um programa. - KalenGi


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





Você pode tentar procurar o comando usando o seguinte:

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

-1



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
Isso funcionaria se a) você pesquisasse a partir da raiz da unidade, b) seu caminho estivesse em uma unidade e c) seu caminho estivesse em ordem lexicográfica. Mesmo sob estas condições, será ridiculamente lento. - Kevin