Frage Windows Äquivalent von Where?


Gibt es ein Äquivalent zum Unix? wo ist Befehl in Windows?

Damit ich herausfinden konnte, wo ich eigentlich Befehle ausführen kann.


145
2017-08-11 10:50


Ursprung




Antworten:


Das woher Befehl tut was Sie wollen und geht mindestens auf das Resource Kit für Windows 98 zurück und ist standardmäßig in Server 2003, Vista und neuer 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 (unter Vista) ausgeführt wird, führt dies zu einer meiner Lieblingsnachrichten:

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

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

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

174
2017-09-10 23:00



Jeden Tag lerne ich etwas Neues ... - Rubens Mariuzzo
Irgendwie traurig where gibt nur die Verwendungshilfe jetzt in Windows 7 zurück. Wollte es für mich selbst sehen: p - Svish
where nicht verfügbar in XP - Tom Roggero
@ Tom Roggero, ich hätte klarer sein können. Es ist Teil des optionalen Ressourcen-Kits, das mit Windows 98 beginnt und nur in der Basisinstallation für die Version nach XP enthalten ist. - Kevin


hackerisch 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
2017-09-10 21:08



Dies ist ein guter Fix für ältere Systeme, aber Sie sollten wissen, dass es zu ein paar Macken führt. Es stimmt mit Verzeichnissen überein, gibt nur das erste gefundene Ergebnis im Pfad für jede Erweiterung zurück und sollte jede Erweiterung enthalten, die in der Umgebungsvariablen PATHEXT gefunden wurde. - Kevin
yah, das ist ein bisschen älter hack von mir, als ich es hier eingefügt habe ich sofort das Potenzial für% PATHEXT% gesehen :) - akira


Benutzen Sie bitte woher 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

6
2017-08-04 21:39



Dies ist die beste Antwort - skan


Irgendwo "da draußen" habe ich diese Batchdatei gefunden 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 gefunden Hier.


2
2017-11-09 05:00





Es gibt mindestens ein Windows-Anschluss für die which Nützlichkeit.


1
2017-08-11 10:53





Ein anderer (GUI) Ansatz, aber schauen Sie sich an Alles.


0
2017-11-09 06:52



Das ist etwas anderes. Es hilft dir definitiv nicht, die Frage zu beantworten "welche ausführbare Datei genau ausgeführt wird, wenn ich den <command> im aktuellen Verzeichnis ausführe"Und darum bittet OP. - Dawid Ferenczy


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

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

0
2017-07-14 15:46



Ich bin nicht mächtig Powershell, aber es scheint, dass Sie den gesamten Verzeichnisbaum durchsuchen. Dies entspricht nicht where die nur in der sucht %PATH%. Außerdem ist es viel langsamer und gibt Fehler für Ordner, für die Sie keine Leseberechtigung haben - phuclv
Einverstanden ... Ich brauchte keine genaue Kopie der Funktionalität, nur die Möglichkeit, ein Programm zu finden. - 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; 
}

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        

0
2017-10-05 14:19





Sie können versuchen, mit folgendem Befehl nach dem Befehl zu suchen:

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

-1
2017-08-11 13:04



Das funktioniert nicht für mich. Zum Beispiel ist der Befehl exp in meinem Pfad, aber dir / s exp oder dir / s exp.exe gibt nur "Datei nicht gefunden". - bobmcn
Dies würde funktionieren, wenn a) Sie von der Wurzel des Laufwerks suchen, b) Ihr Pfad alle auf einem Laufwerk ist und c) Ihr Pfad in lexikografischer Reihenfolge ist. Selbst unter diesen Bedingungen wird es lächerlich langsam. - Kevin