Поиск пути программы, которая будет выполняться из командной строки в Windows
Скажем, у меня есть программа X.EXE
, установленная в папке c:\abcd\happy\
в системе. Папка находится на системном пути. Теперь предположим, что в системе есть еще одна программа, которая также называется X.EXE, но установлена в папке c:\windows\
.
Можно ли быстро узнать из командной строки, что если я наберу X.EXE
, какой из двух X.EXE
будет запущен? (но без необходимости поиска или поиска деталей процесса в диспетчере задач).
Может быть какая-то встроенная команда или какая-то программа, которая может сделать что-то вроде этого?
detect_program_path X.EXE
Ответы
Ответ 1
Используйте команду where
. Первый результат в списке - тот, который будет выполняться.
C:\> where notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
В соответствии с этот пост в блоге, where.exe
включен в Windows Server 2003 и более поздние версии, поэтому это должно работать только с Vista, Win 7, et al.
В Linux эквивалент представляет собой команду which
, например. which ssh
.
Ответ 2
Здесь немного cmd script вы можете скопировать-n-paste в файл с именем 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 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
Ответ 3
В качестве потока, упомянутого в комментарии, get-command
в powershell также может работать. Например, вы можете ввести get-command npm
, а вывод будет следующим:
![введите описание изображения здесь]()