查找将从 Windows 中的命令行执行的程序的路径

Posted

技术标签:

【中文标题】查找将从 Windows 中的命令行执行的程序的路径【英文标题】:Finding the path of the program that will execute from the command line in Windows 【发布时间】:2011-04-29 12:06:25 【问题描述】:

假设我在系统上的文件夹 c:\abcd\happy\ 中安装了一个程序 X.EXE。该文件夹位于系统路径上。现在假设系统上有另一个程序也称为 X.EXE,但安装在文件夹 c:\windows\ 中。

是否可以从命令行快速找出如果我输入X.EXE 两个X.EXE 中的哪一个会启动? (但无需在任务管理器中进行目录搜索或查看进程详细信息)。

也许是某种内置命令,或者某些程序可以做这样的事情? :

detect_program_path X.EXE

【问题讨论】:

Is there an equivalent of 'which' on the Windows command line?的可能重复 【参考方案1】:

使用where 命令。列表中的第一个结果就是将要执行的结果。

C:\> 在哪里记事本 C:\Windows\System32\notepad.exe C:\Windows\notepad.exe

根据this blog post,where.exe 包含在 Windows Server 2003 及更高版本中,因此这应该只适用于 Vista、Win 7 等。

在 Linux 上,等价于 which 命令,例如which ssh.

【讨论】:

+1 !我从来不知道这可能是 Windows 的一部分,所以没有朝那个方向看! :) 可怜的 xp 用户有什么等价物吗? @shahar_m:您是否尝试过 Michael Burr 的以下脚本?它不是内置的,但它可以满足您的需求。 @Kenny:假设您知道 DLL 的名称,您可以使用 ListDLLs 实用程序 (technet.microsoft.com/en-us/sysinternals/bb896656)。从命令行,只需运行listdlls -d foo.dll 即可查看已加载模块的所有进程以及已加载模块的完整路径。或者,您可以只在 Windows 文件中搜索文件名。 @Kenny:您所要求的与此处发布的答案大不相同。您应该创建一个新的 Stack Overflow 问题,其中包含您所做的研究,并在这些 cmets 中发布指向它的链接。【参考方案2】:

正如评论中提到的thread,powershell中的get-command也可以解决。比如你可以输入get-command npm,输出如下:

【讨论】:

(get-command npm).Source 将仅响应 npm 的路径(例如),而不是所有属性的整个表。【参考方案3】:

这是一个小 cmd 脚本,您可以将其复制并粘贴到名为 where.cmd 之类的文件中:

@echo off
rem - search for the given file in the directories specified by the path, and display the first match
rem
rem    The main ideas for this script were taken from Raymond Chen's blog:
rem
rem         http://blogs.msdn.com/b/oldnewthing/archive/2005/01/20/357225.asp
rem
rem
rem - it'll be nice to at some point extend this so it won't stop on the first match. That'll
rem     help diagnose situations with a conflict of some sort.
rem

setlocal

rem - search the current directory as well as those in the path
set PATHLIST=.;%PATH%
set EXTLIST=%PATHEXT%

if not "%EXTLIST%" == "" goto :extlist_ok
set EXTLIST=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
:extlist_ok

rem - first look for the file as given (not adding extensions)
for %%i in (%1) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

rem - now look for the file adding extensions from the EXTLIST
for %%e in (%EXTLIST%) do @for %%i in (%1%%e) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

【讨论】:

以上是关于查找将从 Windows 中的命令行执行的程序的路径的主要内容,如果未能解决你的问题,请参考以下文章

text 在OSX上执行Symantec的“VIP Access”令牌应用程序的命令行。这将从相同的密钥读取并生成sa

如何使用 Windows 命令行环境查找和替换文件中的文本?

Windows 没有将命令行参数传递给从 shell 执行的 Python 程序

如何让Node命令行程序直接在Windows CMD中输入命令执行

如何使用Windows命令行环境查找和替换文件中的文本?

如何查找端口被那个程序占用