web-dev-qa-db-fra.com

Recherche du chemin du programme à exécuter à partir de la ligne de commande sous Windows

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
118
Zabba

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.

216
Chris Schmich

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
9
Michael Burr

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:

enter image description here

5
Gearon