2010-10-23 17 views
95

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é X.EXE mais installé dans le dossier c:\windows\.Trouver le chemin du programme qui sera exécuté à partir de la ligne de commande dans Windows

Est-il possible de trouver rapidement à partir de la ligne de commande que si je tape X.EXE, lequel des deux X.EXE sera lancé? (mais sans avoir à faire une recherche dir ou regarder les détails du processus dans le Gestionnaire des tâches).

Peut-être une sorte de commande intégrée, ou un programme là-bas qui peut faire quelque chose comme ça? :

detect_program_path X.EXE 
+0

double possible de [Y at-il un équivalent de « qui » sur la ligne de commande Windows?] (Http://stackoverflow.com/ questions/304319/is-there-an-equivalent-of-which-on-the-windows-command-line) –

Répondre

171

Utilisez la commande where. Le premier résultat de la liste est celui qui sera exécuté.

 
C:\> where notepad 
C:\Windows\System32\notepad.exe 
C:\Windows\notepad.exe 

Selon this blog post, where.exe est fourni avec Windows Server 2003 et plus tard, donc cela devrait fonctionner avec Vista, Windows 7, et al.

Sous Linux, l'équivalent est la commande which, par ex. which ssh.

+2

+1! Je n'ai jamais su que cela aurait pu faire partie de Windows et n'a donc pas regardé dans cette direction! :) – Zabba

+1

Tout équivalent pour les pauvres utilisateurs XP? –

+0

@shahar_m: avez-vous essayé le script ci-dessous de Michael Burr? Ce n'est pas intégré, mais il pourrait faire ce dont vous avez besoin. –

9

Voici un petit script cmd vous pouvez copier-n-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 
0

Comme le thread mentionné dans le commentaire, get-command en Powershell peut aussi travailler dehors. Par exemple, vous pouvez taper get-command npm et la sortie est comme ci-dessous:

enter image description here