Setara dengan Windows di mana?

164

Apakah ada yang setara dengan perintah Unix whereis di Windows?

Sehingga saya bisa mencari tahu di mana perintah saya bisa menjalankan sebenarnya.

Svish
sumber

Jawaban:

203

The mana perintah melakukan apa yang Anda inginkan dan kembali setidaknya ke kit sumber daya untuk Windows 98, dan disertakan secara default di Server 2003, Vista, dan yang lebih baru:

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

Jika dijalankan tanpa argumen (pada Vista), itu menghasilkan salah satu pesan favorit saya:

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

Jika dijalankan di PowerShell, pastikan untuk menyertakan '.exe' untuk membedakan dari alias atau skrip 'mana' di sepanjang jalur. ('where' adalah alias khas untuk Where-Object.ps1)

C:\> where.exe where.exe
C:\Windows\System32\where.exe
Kevin
sumber
4
Setiap hari saya belajar sesuatu yang baru ...
Rubens Mariuzzo
4
Agak menyedihkan wherehanya mengembalikan bantuan penggunaan sekarang di Windows 7. Ingin melihatnya sendiri: p
Svish
2
wheretidak tersedia di XP
Tom Roggero
1
@ TomRoggero, saya bisa lebih jelas. Ini bagian dari kit sumber daya opsional yang dimulai dengan Windows 98, dan hanya disertakan dalam instalasi dasar untuk versi setelah XP.
Kevin
7

peretas yang.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
sumber
1
Ini adalah perbaikan yang baik untuk sistem yang lebih lama, tetapi Anda harus tahu bahwa itu menghasilkan beberapa keanehan. Ini cocok dengan direktori, hanya mengembalikan hasil pertama yang ditemukan di jalur untuk setiap ekstensi, dan harus menyertakan setiap ekstensi yang ditemukan dalam variabel lingkungan PATHEXT.
Kevin
yah, ini adalah hack saya yang sedikit lebih tua, ketika saya menempelkannya di sini saya langsung melihat potensi untuk% PATHEXT% :)
akira
7

Silakan, gunakan perintah mana :

> where app.exe

Ini adalah cara terbaik untuk mencapai tujuan Anda.

Anda juga dapat menggunakan perintah PowerShell:

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

dan versi yang diperluas terlihat seperti ini:

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

Di suatu tempat "di luar sana" Saya menemukan file batch ini whereis.bat:

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

Pembaruan: mungkin saya menemukannya di sini .

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

Contoh:

PS> temukan 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
sumber
0

Saya sedang mencari ini hari ini dan karena saya di XP tanpa kit sumber daya, saya beralih ke PowerShell dengan perintah berikut:

dir -path c:\ -filter ffmpeg.* -r
KalenGi
sumber
Saya tidak mahir dalam powershell tetapi tampaknya Anda mencari melalui seluruh pohon direktori. Ini tidak setara dengan whereyang hanya mencari di %PATH%. Selain itu jauh lebih lambat dan memberikan kesalahan pada folder yang Anda tidak memiliki izin baca
phuclv
Setuju ... Saya tidak memerlukan salinan fungsionalitas yang tepat, hanya kemampuan untuk menemukan program.
KalenGi
-1

Anda dapat mencoba mencari perintah menggunakan yang berikut:

dir /s type-whatever-you-are-searching
Shakeel
sumber
Ini tidak bekerja untuk saya. Sebagai contoh, perintah exp ada di jalur saya, tetapi dir / s exp atau dir / s exp.exe hanya memberikan "File Not Found".
bobmcn
5
Ini akan berhasil jika a) Anda mencari dari akar drive, b) path Anda semua pada satu drive, dan c) path Anda berada dalam urutan leksikografis. Bahkan dalam kondisi seperti ini akan sangat lambat.
Kevin