2010-10-23 10 views
95

Dire che ho un programma X.EXE installato nella cartella sul sistema. La cartella si trova sul percorso di sistema. Supponiamo ora che ci sia un altro programma sul sistema chiamato anche X.EXE, ma che sia installato nella cartella c:\windows\.Trovare il percorso del programma che verrà eseguito dalla riga di comando in Windows

È possibile scoprire rapidamente dalla riga di comando che se si digita X.EXE quale dei due X.EXE verrà avviato? (ma senza dover cercare nella directory o esaminare i dettagli del processo in Task Manager).

Forse una sorta di comando incorporato, o qualche programma là fuori che può fare qualcosa di simile? :

detect_program_path X.EXE 
+0

Eventuali duplicati di [Esiste un equivalente di 'che' sulla riga di comando di Windows?] (Http://stackoverflow.com/ questions/304319/is-there-an-equivalent-of-which-on-the-windows-command-line) –

risposta

171

Utilizzare il comando where. Il primo risultato nell'elenco è quello che verrà eseguito.

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

Secondo this blog post, where.exe è incluso in Windows Server 2003 e in seguito, quindi questo dovrebbe funzionare con Vista, Win 7, et al.

Su Linux, l'equivalente è il comando which, ad es. which ssh.

+2

+1! Non ho mai saputo che avrebbe potuto essere una parte di Windows e quindi non ho guardato in quella direzione! :) – Zabba

+1

Qualsiasi equivalente per gli utenti poveri xp? –

+0

@shahar_m: hai provato la sceneggiatura di Michael Burr? Non è integrato, ma potrebbe fare ciò di cui hai bisogno. –

9

Ecco un piccolo script cmd è possibile copiare-n-incolla in un file con un nome simile 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

Come il thread menzionato nel commento, get-command in PowerShell può anche lavorare fuori. Ad esempio, è possibile digitare get-command npm e l'uscita è la seguente:

enter image description here

Problemi correlati