Windows等效于whereis?


163

Windows中是否有与Unix whereis命令等效的命令?

这样我可以弄清楚我可以实际运行的命令在哪里。

Answers:


202

这里命令你想要做什么,至少可以追溯到Windows 98的资源工具包,并在Server 2003中包含默认情况下,Windows Vista和更新:

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

如果不带任何参数执行(在Vista上),则会导致我最喜欢的消息之一:

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

如果在PowerShell中执行,请确保包含“ .exe”以区别路径中的任何“ where”别名或脚本。(“ where”是Where-Object.ps1的典型别名)

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

4
每天我都会学到新的东西...
Rubens Mariuzzo 2013年

4
悲伤的那种where刚刚返回使用帮助,现在在Windows 7中想看到它自己:对
Svish

2
where在XP中不可用
Tom Roggero 2014年

1
@TomRoggero,我本来可以更清楚。它是从Windows 98开始的可选资源工具包的一部分,仅包含在XP之后版本的基本安装中。
凯文

7

骇客的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) 
)

1
对于较旧的系统,这是一个很好的解决方法,但是您应该知道它会导致一些怪癖。它与目录匹配,仅返回在每个扩展名的路径中找到的第一个结果,并且应包括在PATHEXT环境变量中找到的每个扩展名。
凯文(Kevin)2009年

是的,这是我的旧版本,当我将其粘贴到此处时,我立即看到了%PATHEXT%的可能性:)
akira

7

请使用where命令:

> where app.exe

这是实现目标的最佳方法。

您还可以使用PowerShell命令:

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

扩展版本如下所示:

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

3

我在某个地方找到了这个批处理文件whereis.bat

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

更新:也许我在这里找到



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

例:

PS>找到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

我今天在搜索此文件,由于我使用的是没有资源工具包的XP,因此我使用以下命令转到了powershell:

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

我不精通Powershell,但似乎您正在搜索整个目录树。这与where仅在中搜索不等效%PATH%。此外,它要慢得多,并且会为您没有读取权限的文件夹提供错误
phuclv

同意...我不需要功能的确切副本,而只是需要找到程序的功能。
KalenGi

-1

您可以尝试使用以下命令搜索命令:

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

这对我不起作用。例如,exp命令位于我的路径中,但dir / s exp或dir / s exp.exe仅给出“找不到文件”。
bobmcn

4
如果a)从驱动器的根目录搜索,b)路径全部在一个驱动器上,并且c)路径按字典顺序排序,则此方法将起作用。即使在这些条件下,它也会非常缓慢。
凯文”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.