这样我可以弄清楚我实际可以在哪里运行的命令。
#1 楼
where命令可以满足您的要求,并且至少可以追溯到Windows 98的资源工具包,并且默认情况下包含在Server 2003,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
#2 楼
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)
)
评论
对于较旧的系统,这是一个很好的解决方法,但是您应该知道它会导致一些怪癖。它与目录匹配,仅返回在每个扩展名的路径中找到的第一个结果,并且应包括在PATHEXT环境变量中找到的每个扩展名。
–凯文
2009年9月11日14:48
是的,这是我的旧版本,当我将其粘贴到此处时,我立即看到了%PATHEXT%的潜力:)
– akira
09年9月11日在18:08
#3 楼
请使用where命令:> where app.exe
这是实现目标的最佳方法。
还可以使用PowerShell命令:
> $env:path.Split(';') | gci -Filter app.exe
扩展版本如下:
> $env:path.Split(';') | select -Unique | ? {$_ -and (test-path $_)} | gci -Filter app.exe
#4 楼
我在某个地方的某个地方找到了此批处理文件whereis.bat
:@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i
更新:也许我在这里找到了。
#5 楼
which
实用程序至少有一个Windows端口。#6 楼
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
#7 楼
我今天在搜索此文件,因为我使用的是没有资源工具包的XP,所以我使用以下命令转到了powershell:dir -path c:\ -filter ffmpeg.* -r
评论
我不精通Powershell,但似乎您正在搜索整个目录树。这与仅在%PATH%中搜索的位置不同。此外,它要慢得多,并且会为您没有读取权限的文件夹提供错误
–phuclv
17-4-30在3:07
同意...我不需要功能的确切副本,而只是需要找到程序的功能。
– KalenGi
17年4月30日在9:44
#8 楼
在Windows 10中的cmd中使用where命令,我使用以下命令递归地在c驱动器中搜索c#编译器csc.exe
的副本。c:\> where /r c:\ csc.exe
示例:
在哪里可以找到csc.exe的所有副本
#9 楼
您可以尝试使用以下命令搜索命令:dir /s type-whatever-you-are-searching
评论
这对我不起作用。例如,exp命令位于我的路径中,但dir / s exp或dir / s exp.exe仅给出“找不到文件”。
– bobmcn
09-09-10 21:12
如果a)从驱动器的根目录搜索,b)路径全部位于一个驱动器上,并且c)路径按字典顺序排列,则此方法有效。即使在这些条件下,它也会非常缓慢。
–凯文
09-09-10 23:09
评论
每天我学到新东西...
– Rubens Mariuzzo
13年1月25日在4:00
有点可悲的是,现在在Windows 7中只是返回使用帮助。想亲自看看:p
–Svish
2014年2月6日下午13:48
在XP中不可用
–汤姆·罗格罗(Tom Roggero)
2014年2月10日下午1:55
@TomRoggero,我本来可以更清楚。它是从Windows 98开始的可选资源工具包的一部分,仅包含在XP之后版本的基本安装中。
–凯文
2014年2月10日下午17:32
对于使用Windows 10进行搜索的任何人:您正在Powershell中寻找Get-Command或gcm,并且不要在没有参数的情况下尝试
–丹尼尔·索莫吉(Daniel Somogyi)
20年6月2日18:00