假设我在系统上的文件夹X.EXE
中安装了一个程序c:\abcd\happy\
。该文件夹位于系统路径上。现在假设系统上还有另一个程序,也称为X.EXE,但安装在文件夹c:\windows\
中。
是否可以从命令行快速找到,如果我输入X.EXE
两个X.EXE
中的哪一个将被启动? (但无需在目录管理器中搜索或查看流程详细信息)。
也许是某种内置命令,或者那些可以做这样的事情的程序? :
detect_program_path X.EXE
答案 0 :(得分:210)
使用where
命令。列表中的第一个结果是将执行的结果。
C:\> where notepad 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 :(得分:9)
这是一个小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
答案 2 :(得分:3)
正如评论中提到的thread一样,powershell中的get-command
也可以解决问题。例如,您可以键入get-command npm
,输出如下: