Windows equivalente di dov'è?


161

Esiste un equivalente del comando Unix whereis in Windows?

In modo che potessi capire dove sono effettivamente i comandi che posso eseguire.

Risposte:


200

Il comando where fa quello che vuoi e risale almeno al kit di risorse per Windows 98 ed è incluso per impostazione predefinita in Server 2003, Vista e versioni successive:

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

Se eseguito senza argomenti (su Vista), risulta in uno dei miei messaggi preferiti:

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

Se si esegue in PowerShell, assicurarsi di includere '.exe' per distinguere da qualsiasi alias o script 'where' lungo il percorso. ('dove' è un tipico alias per Where-Object.ps1)

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

4
Ogni giorno imparo qualcosa di nuovo ...
Rubens Mariuzzo

4
Un wherepo ' triste restituisce solo aiuto per l'uso ora in Windows 7.
Volevo

2
wherenon disponibile in XP
Tom Roggero

1
@ TomRoggero, avrei potuto essere più chiaro. Fa parte del kit di risorse opzionale che inizia con Windows 98 e incluso solo nell'installazione di base per la versione dopo 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
Questa è una buona soluzione per i sistemi più vecchi, ma dovresti sapere che si traduce in alcune stranezze. Corrisponde alle directory, restituisce solo il primo risultato trovato nel percorso per ciascuna estensione e deve includere ogni estensione trovata nella variabile di ambiente PATHEXT.
Kevin,

sì, questo è un mio trucco un po 'più vecchio, quando l'ho incollato qui ho visto immediatamente il potenziale per% PATHEXT% :)
Akira,

7

Per favore, usa dove comando:

> where app.exe

È il modo migliore per raggiungere il tuo obiettivo.

Puoi anche usare il comando PowerShell:

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

e la versione estesa si presenta così:

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

3

Da qualche parte "là fuori" ho trovato questo file batch whereis.bat:

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

Aggiornamento: forse l'ho trovato qui .



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; 
}

Esempio:

PS> trova 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

Lo stavo cercando oggi e poiché sono su XP senza il kit di risorse, mi sono rivolto a PowerShell con il seguente comando:

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

Non sono esperto in PowerShell ma sembra che tu stia cercando in tutto l'albero delle directory. Questo non equivale a wherequale ricerca solo nel %PATH%. Inoltre è molto più lento e dà errori per le cartelle che non hai il permesso di lettura
phuclv

D'accordo ... Non ho richiesto una copia esatta della funzionalità, ma solo la possibilità di individuare un programma.
KalenGi

-1

Puoi provare a cercare il comando usando quanto segue:

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

Questo non funziona per me. Ad esempio, il comando exp è nel mio percorso, ma dir / s exp o dir / s exp.exe fornisce semplicemente "File non trovato".
bobmcn,

4
Questo funzionerebbe se a) cerchi dalla radice dell'unità, b) il percorso è tutto su un'unità e c) il percorso è in ordine lessicografico. Anche in queste condizioni sarà ridicolmente lento.
Kevin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.