Windows tương đương với đâu?


164

Có tương đương với lệnh Unix whereis trong Windows không?

Vì vậy, tôi có thể tìm ra nơi các lệnh tôi có thể chạy thực sự là.

Câu trả lời:


203

Lệnh where thực hiện những gì bạn muốn và quay lại ít nhất với bộ tài nguyên cho Windows 98 và được bao gồm theo mặc định trong Server 2003, Vista và mới hơn:

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

Nếu được thực thi mà không có đối số (trên Vista), nó sẽ dẫn đến một trong những thông điệp yêu thích của tôi:

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

Nếu thực thi trong PowerShell, hãy đảm bảo bao gồm '.exe' để phân biệt với bất kỳ bí danh 'trong đó' hoặc tập lệnh dọc theo đường dẫn. ('where' là bí danh điển hình cho Where-Object.ps1)

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

4
Mỗi ngày tôi học được một điều mới ...
Rubens Mariuzzo

4
Loại buồn wherechỉ trả lại trợ giúp sử dụng ngay bây giờ trong Windows 7. Muốn tự mình xem nó: p
Svish

2
wherekhông khả dụng trong XP
Tom Roggero

1
@TomRoggero, tôi có thể đã rõ ràng hơn. Đây là một phần của bộ tài nguyên tùy chọn bắt đầu với Windows 98 và chỉ được bao gồm trong bản cài đặt cơ bản cho phiên bản sau XP.
Kevin

7

tin tặc nào.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
Đây là một sửa chữa tốt cho các hệ thống cũ, nhưng bạn nên biết rằng nó dẫn đến một vài quirks. Nó khớp với các thư mục, chỉ trả về kết quả đầu tiên được tìm thấy trong đường dẫn cho mỗi tiện ích mở rộng và nên bao gồm mọi tiện ích mở rộng được tìm thấy trong biến môi trường PATHEXT.
Kevin

yah, đây là bản hack cũ hơn một chút của tôi, khi tôi dán nó ở đây tôi đã thấy ngay tiềm năng cho% PATHEXT% :)
akira

7

Vui lòng sử dụng lệnh where :

> where app.exe

Đó là cách tốt nhất để đạt được mục tiêu của bạn.

Bạn cũng có thể sử dụng lệnh PowerShell:

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

và phiên bản mở rộng trông như thế này:

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

3

Ở đâu đó "ngoài kia" tôi tìm thấy tập tin này whereis.bat:

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

Cập nhật: có thể tôi tìm thấy nó ở đây .



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; 
}

Thí dụ:

PS> tìm Mozilla.admx

    Directory: C:\Windows\PolicyDefinitions                                                                                     

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        1/27/2016  12:22 PM          37146 Mozilla.admx                                                                   

PS> trong đó firefox.exe

    Directory: C:\Program Files\Mozilla Firefox                                                                                 

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        9/21/2017   5:30 PM         477136 firefox.exe        

0

Tôi đã tìm kiếm cái này ngày hôm nay và vì tôi đang dùng XP mà không có bộ tài nguyên, tôi đã chuyển sang powershell với lệnh sau:

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

Tôi không thành thạo về quyền hạn nhưng có vẻ như bạn đang tìm kiếm trong toàn bộ cây thư mục. Điều này không tương đương với wherechỉ tìm kiếm trong %PATH%. Hơn nữa, nó chậm hơn rất nhiều và gây ra lỗi cho các thư mục mà bạn không có quyền đọc
phuclv

Đồng ý ... Tôi không yêu cầu một bản sao chính xác của chức năng, chỉ là khả năng định vị chương trình.
KalenGi

-1

Bạn có thể thử tìm kiếm lệnh bằng cách sử dụng như sau:

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

Điều này không làm việc cho tôi. Ví dụ: lệnh exp nằm trong đường dẫn của tôi, nhưng exp / dir exp hoặc dir / s exp.exe chỉ cung cấp "File Not Found".
bobmcn

4
Điều này sẽ hoạt động nếu a) bạn tìm kiếm từ gốc của ổ đĩa, b) đường dẫn của bạn là tất cả trên một ổ đĩa và c) đường dẫn của bạn theo thứ tự từ điển. Ngay cả trong những điều kiện này, nó sẽ chậm một cách lố bịch.
Kevin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.