Trovare il percorso del programma che verrà eseguito dalla riga di comando in Windows


128

Di 'che ho un programma X.EXEinstallato nella cartella c:\abcd\happy\del sistema. La cartella si trova sul percorso del sistema. Supponiamo ora che ci sia un altro programma sul sistema che si chiama anche X.EXE ma è installato nella cartella c:\windows\.

È possibile scoprire rapidamente dalla riga di comando che se digito X.EXEquale dei due X.EXEverrà avviato? (ma senza dover indirizzare la ricerca o guardare i dettagli del processo in Task Manager).

Forse una sorta di comando integrato o qualche programma là fuori che può fare qualcosa del genere? :

detect_program_path X.EXE

Risposte:


239

Usa il wherecomando Il primo risultato nell'elenco è quello che verrà eseguito.

C: \> dove blocco note
C: \ Windows \ System32 \ notepad.exe
notepad.exe \ Windows \: C

Secondo questo post del blog , where.exeè incluso in Windows Server 2003 e versioni successive, quindi questo dovrebbe funzionare solo con Vista, Win 7 e altri.

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


2
+1! Non ho mai saputo che questo avrebbe potuto far parte di Windows e quindi non ho guardato in quella direzione! :)
Zabba,

1
Qualche equivalente per i poveri utenti xp?
shahar_m,

@shahar_m: hai provato lo script di seguito da Michael Burr? Non è integrato, ma potrebbe fare ciò di cui hai bisogno.
Chris Schmich,

1
@Kenny: Supponendo che tu conosca il nome della DLL, puoi usare l'utilità ListDLLs ( technet.microsoft.com/en-us/sysinternals/bb896656 ). Dalla riga di comando, basta eseguire listdlls -d foo.dllper vedere tutti i processi che hanno il modulo caricato e il percorso completo al modulo caricato. In alternativa, puoi semplicemente eseguire una ricerca di file Windows per il nome del file.
Chris Schmich,

2
@Kenny: Quello che stai chiedendo è molto diverso dalla risposta pubblicata qui. Dovresti creare una nuova domanda Stack Overflow con quale ricerca hai fatto e pubblicare un link ad essa in questi commenti.
Chris Schmich,

10

Ecco un piccolo script cmd che puoi copiare e incollare in un file chiamato qualcosa del tipo 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

8

Come il thread menzionato nel commento, get-commandin PowerShell può anche risolverlo. Ad esempio, è possibile digitare get-command npme l'output è il seguente:

inserisci qui la descrizione dell'immagine


(get-command npm).Sourcerisponderà solo con il percorso di npm (per esempio) invece dell'intera tabella di tutte le proprietà.
David Brown,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.