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

查找将从Windows中的命令行执行的程序的路径,windows,command-line,path,Windows,Command Line,Path,假设我在系统上的文件夹c:\abcd\happy\中安装了一个程序X.EXE。文件夹位于系统路径上。现在,假设系统上还有另一个程序,也称为X.EXE,但安装在文件夹c:\windows\中 如果我输入X.EXE两个X.EXE中的哪一个将被启动,是否可以从命令行快速找到答案?(但无需直接搜索或查看Task Manager中的流程详细信息) 也许是某种内置命令,或者是一些可以执行类似操作的程序 detect_program_path X.EXE 使用where命令。列表中的第一个结果是将要执行的结

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

如果我输入
X.EXE
两个
X.EXE
中的哪一个将被启动,是否可以从命令行快速找到答案?(但无需直接搜索或查看Task Manager中的流程详细信息)

也许是某种内置命令,或者是一些可以执行类似操作的程序

detect_program_path X.EXE

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

C:\> where notepad C:\Windows\System32\notepad.exe C:\Windows\notepad.exe C:\>记事本在哪里 C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 据介绍,
where.exe
包含在WindowsServer2003及更高版本中,因此这应该只适用于Vista、Win7等


在Linux上,等效的命令是
哪个ssh

这里有一个小小的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
正如注释中提到的,powershell中的
get命令也可以解决这个问题。例如,您可以键入
get命令npm
,输出如下:


+1!我从来不知道这可能是窗户的一部分,所以没有朝那个方向看!:)对于可怜的xp用户,你有没有尝试过下面迈克尔·伯尔的脚本?它不是内置的,但可能会满足您的需要。@Kenny:假设您知道DLL的名称,您可以使用ListDLLs实用程序()。在命令行中,只需运行
listdlls-dfoo.dll
即可查看已加载模块的所有进程以及加载模块的完整路径。或者,您也可以在Windows文件中搜索文件名。@Kenny:您所要求的与此处发布的答案大不相同。您应该用您所做的研究创建一个新的堆栈溢出问题,并在这些评论中发布一个指向该问题的链接。
(get command npm)可能重复。
将只响应npm的路径(例如),而不是所有属性的整个表。