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.