Disons que j'ai un programme X.EXE
installé dans le dossier c:\abcd\happy\
sur le système. Le dossier est sur le chemin du système. Supposons maintenant qu’il existe un autre programme sur le système appelé également X.EXE mais installé dans le dossier c:\windows\
.
Est-il possible de savoir rapidement à partir de la ligne de commande que si je tape X.EXE
lequel des deux X.EXE
sera lancé? (mais sans avoir à chercher dans le répertoire ou à consulter les détails du processus dans le gestionnaire de tâches).
Peut-être une sorte de commande intégrée, ou un programme qui peut faire quelque chose comme ça? :
detect_program_path X.EXE
Utilisez la commande where
. Le premier résultat de la liste est celui qui sera exécuté.
C: \> où le bloc-notes C:\Windows\System32\notepad.exe C:\Windows\notepad.exe
Selon cet article de blog , where.exe
est inclus dans Windows Server 2003 et versions ultérieures, il ne devrait donc fonctionner que sous Vista, Windows 7, et autres.
Sous Linux, l’équivalent est la commande which
, par exemple. which ssh
.
Voici un petit script cmd que vous pouvez copier-coller dans un fichier nommé quelque chose comme 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
Comme le fil mentionné dans le commentaire, get-command
dans PowerShell peut également résoudre le problème. Par exemple, vous pouvez taper get-command npm
et la sortie est comme ci-dessous: