Odpowiednik systemu Windows Whereis?

163

Czy w systemie Windows istnieje odpowiednik uniksowego polecenia whereis ?

Tak, żebym mógł dowiedzieć się, gdzie właściwie można uruchomić polecenia.

Svish
źródło

Odpowiedzi:

202

Komenda where robi to, co chcesz i wraca co najmniej do zestawu zasobów dla Windows 98 i jest domyślnie dołączona do Server 2003, Vista i nowszych:

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

Jeśli zostanie wykonany bez argumentów (w systemie Vista), spowoduje to jedną z moich ulubionych wiadomości:

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

Wykonując w PowerShell, pamiętaj o dołączeniu „.exe”, aby odróżnić od dowolnego aliasu lub skryptu „where” wzdłuż ścieżki. („where” jest typowym aliasem dla Where-Object.ps1)

C:\> where.exe where.exe
C:\Windows\System32\where.exe
Kevin
źródło
4
Codziennie uczę się czegoś nowego ...
Rubens Mariuzzo
4
Trochę smutne, wherepo prostu zwraca pomoc dotyczącą użytkowania teraz w systemie Windows 7. Chciałem to zobaczyć na
własne
2
whereniedostępne w XP
Tom Roggero
1
@TomRoggero, mógłbym być bardziej jasny. Jest to część opcjonalnego zestawu zasobów, począwszy od systemu Windows 98, i jest zawarta tylko w instalacji podstawowej dla wersji po 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) 
)
akira
źródło
1
Jest to dobra poprawka dla starszych systemów, ale powinieneś wiedzieć, że powoduje to kilka dziwactw. Dopasowuje katalogi, zwraca tylko pierwszy wynik znaleziony w ścieżce dla każdego rozszerzenia i powinien obejmować każde rozszerzenie znalezione w zmiennej środowiskowej PATHEXT.
Kevin
tak, to mój nieco starszy hack, kiedy go wkleiłem, od razu zobaczyłem potencjał% PATHEXT% :)
akira
7

Proszę użyć polecenia where :

> where app.exe

To najlepszy sposób na osiągnięcie celu.

Możesz także użyć polecenia PowerShell:

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

i wersja rozszerzona wygląda następująco:

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

Gdzieś „tam” znalazłem ten plik wsadowy whereis.bat:

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

Aktualizacja: może znalazłem to tutaj .

Craig McQueen
źródło
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; 
}

Przykład:

PS> znajdź 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
źródło
0

Szukałem tego dzisiaj, a ponieważ jestem na XP bez zestawu zasobów, zwróciłem się do PowerShell z następującą komendą:

dir -path c:\ -filter ffmpeg.* -r
KalenGi
źródło
Nie jestem biegły w PowerShell, ale wygląda na to, że przeszukujesz całe drzewo katalogów. Nie jest to równoważne z wheretym, że wyszukuje tylko w %PATH%. Co więcej, jest znacznie wolniejszy i powoduje błędy w folderach, do których nie masz uprawnień do odczytu
phuclv 30.04.17
Uzgodnione ... Nie wymagałem dokładnej kopii funkcjonalności, tylko możliwość zlokalizowania programu.
KalenGi
-1

Możesz spróbować wyszukać polecenie, wykonując następujące czynności:

dir /s type-whatever-you-are-searching
Shakeel
źródło
To mi nie działa. Na przykład polecenie exp znajduje się w mojej ścieżce, ale katalog dir / s exp lub dir / s exp.exe podaje po prostu „Nie znaleziono pliku”.
bobmcn
4
Działałoby to, gdy: a) wyszukujesz z katalogu głównego dysku, b) twoja ścieżka znajduje się na jednym dysku, oraz c) twoja ścieżka jest w porządku leksykograficznym. Nawet w tych warunkach będzie śmiesznie powolny.
Kevin