Windows-Äquivalent zu whereis?

164

Gibt es eine Entsprechung zum Unix- Befehl whereis in Windows?

Damit ich herausfinden kann, wo Befehle ich tatsächlich ausführen kann, ist.

Svish
quelle

Antworten:

203

Der Befehl where macht das, was Sie wollen, und geht mindestens auf das Resource Kit für Windows 98 zurück. Er ist standardmäßig in Server 2003, Vista und neueren Versionen enthalten:

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

Wenn es ohne Argumente ausgeführt wird (unter Vista), wird eine meiner Lieblingsnachrichten angezeigt:

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

Stellen Sie bei der Ausführung in PowerShell sicher, dass Sie ".exe" einschließen, um von allen "where" -Aliasen oder -Skripten entlang des Pfads zu unterscheiden. ('where' ist ein typischer Alias ​​für Where-Object.ps1)

C:\> where.exe where.exe
C:\Windows\System32\where.exe
Kevin
quelle
4
Jeden Tag lerne ich etwas Neues ...
Rubens Mariuzzo
4
Irgendwie traurig wherekehrt gerade Verwendungshilfe in Windows 7 zurück. Wollte es für mich selbst sehen: p
Svish
2
whereIn XP nicht verfügbar
Tom Roggero
1
@TomRoggero, ich hätte klarer sein können. Es ist Teil des optionalen Resource Kits, das mit Windows 98 beginnt und nur in der Basisinstallation für Versionen nach XP enthalten ist.
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) 
)
Akira
quelle
1
Dies ist eine gute Lösung für ältere Systeme, aber Sie sollten wissen, dass dies zu einigen Macken führt. Es stimmt mit Verzeichnissen überein, gibt nur das erste Ergebnis zurück, das im Pfad für jede Erweiterung gefunden wurde, und sollte jede Erweiterung enthalten, die in der Umgebungsvariablen PATHEXT gefunden wurde.
Kevin
yah, das ist ein bisschen älter von mir, als ich es hier eingefügt habe, sah ich sofort das Potenzial für% PATHEXT% :)
akira
7

Bitte benutzen Sie den where Befehl:

> where app.exe

Es ist der beste Weg, um Ihr Ziel zu erreichen.

Sie können auch den PowerShell-Befehl verwenden:

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

und erweiterte Version sieht so aus:

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

Irgendwo "da draußen" fand ich diese Batch-Datei whereis.bat:

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

Update: Vielleicht habe ich es hier gefunden .

Craig McQueen
quelle
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; 
}

Beispiel:

PS> finde 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        
Rupert
quelle
0

Ich habe heute danach gesucht und da ich auf XP ohne das Resource Kit bin, habe ich mich mit dem folgenden Befehl an Powershell gewandt:

dir -path c:\ -filter ffmpeg.* -r
KalenGi
quelle
Ich beherrsche Powershell nicht, aber anscheinend durchsuchen Sie den gesamten Verzeichnisbaum. Dies ist nicht gleichbedeutend mit wheredem nur in der %PATH%. Außerdem ist es viel langsamer und gibt Fehler für Ordner aus, für die Sie keine Leseberechtigung haben
phuclv
Einverstanden ... Ich benötigte keine exakte Kopie der Funktionalität, nur die Fähigkeit, ein Programm zu finden.
KalenGi
-1

Sie können versuchen, den Befehl folgendermaßen zu suchen:

dir /s type-whatever-you-are-searching
Shakeel
quelle
Das funktioniert bei mir nicht. Beispielsweise befindet sich der Befehl exp in meinem Pfad, aber dir / s exp oder dir / s exp.exe geben nur "Datei nicht gefunden" aus.
Bobmcn
4
Dies würde funktionieren, wenn a) Sie vom Stammverzeichnis des Laufwerks suchen, b) Ihr Pfad sich auf einem Laufwerk befindet und c) Ihr Pfad in lexikografischer Reihenfolge vorliegt. Auch unter diesen Bedingungen wird es lächerlich langsam.
Kevin