2009-09-30 17:06:38 +0000 2009-09-30 17:06:38 +0000
174
174

Come trovo la posizione di un eseguibile in Windows?

Mi sono ricordato che ho usato uno strumento chiamato where per trovare le posizioni di qualsiasi programma eseguibile come questo in una console:

C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

Ora non riesco a trovare questo strumento. Non sei sicuro che Windows abbia uno strumento incorporato per fare questa ricerca?

Risposte (12)

380
380
380
2012-06-24 11:41:10 +0000

Secondo la risposta di StackOverflow a C'è un equivalente di ‘quale’ su windows? , where.exe lo fa su Windows 7 e Windows Server 2003 e successivi:

Esempio

C:\> where ping

Output:

C:\Windows\System32\PING.EXE
``` &001 


In powershell usare `where.exe`, `Get-Command` (o la sua abbreviazione `gcm`), poiché `where` è l'alias predefinito per `Where-Object`.
23
23
23
2012-09-27 01:23:30 +0000

EDIT: Avrei dovuto aggiungere, se non è possibile utilizzare il comando WHERE dal prompt dei comandi, controllare la variabile PATH. (Basta usare il comando “path”.) Assicuratevi che C:\Windows\System32 sia nel vostro path. Ecco dove si trova “where.exe”.

WHERE è il comando che state cercando! WHERE è come un incrocio tra il “quale” integrato nella shell UNIX e il comando “localizza”, in quanto funziona sia per i comandi eseguibili che per i file regolari.

È anche un po’ più complesso di uno dei due, anche se, in generale, un semplice

WHERE <file>

funzionerà.

È diverso dal comando “localizza” in quanto non sta cercando attraverso l'intero filesystem. Invece, il comportamento predefinito è quello di cercare i file in due posizioni:

  • La directory corrente.
  • Tutte le directory nella variabile PATH.

Quindi, qualsiasi comando che si possa eseguire direttamente da un prompt dei comandi senza specificare la directory, sarà trovato dal comando WHERE. (Perché qualsiasi comando del genere è già nella lista delle variabili PATH.)

Se volete cercare solo nella variabile path del comando, potete usare:

WHERE "$path:<search text>"
``` ```
WHERE /R <Top Level Directory> <search text>

Se, invece, volete trovare tutte le copie di un file in un albero di directory, potete usare:

WHERE /R C:\Windows dxdiag

C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe
``` ```
WHERE /R C:\Windows dxdiagn

Infine, WHERE troverà i comandi e qualsiasi file con estensione dalla variabile PATHEXT senza includere l'estensione. Tutti gli altri file devono essere specificati esattamente o con caratteri jolly.

Prendiamo ad esempio i file “dxdiag.exe” e “dxdiagn.dll”. Si noti il seguente comando e il suo output:

WHERE /R C:\Windows dxdiagn*

C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll

Riesce a restituire tutte le versioni di “dxdiag.exe” perché “.exe” è una delle estensioni della variabile PATHEXT. (Nota: anche “WHERE dxdiag” avrebbe funzionato, perché C:\Windows\System32 è nella variabile PATHEXT.)

&001

d'altra parte, non riesce a restituire alcun risultato, perché “.dll” è non in PATHEXT.

In questo caso, guardate il risultato che l'aggiunta di un jolly ci dà:

&001

Restituisce con successo tutte le versioni di dxdiagn.dll.

Per maggiori informazioni, usate “WHERE /? Spero che questo sia d'aiuto!

10
10
10
2009-09-30 17:15:31 +0000

utilizzare dir:

cd \
dir /s /b mytool.exe
``` &001 


la parte `cd utilizzare `dir`: 


cd \ dir /s /b mytool.exe “` &001

la parte cambia alla radice dell'unità, per garantire che la ricerca parta dall'alto della gerarchia.

9
9
9
2014-04-07 12:52:13 +0000

Si noti che alcune cose potrebbero essere un po’ diverse per PowerShell:

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe
3
3
3
2009-09-30 19:26:11 +0000

Su windows si può usare l'utility gratuita Everything search engine per cercare instantly qualsiasi file per nome completo o parziale (se il disco fisso è formattato in ntfs).

3
3
3
2009-09-30 18:23:36 +0000

Frustrante che non sia integrato come semplice comando.

Tuttavia, ci sono diverse soluzioni, una delle quali è un batch file.

Creare un file batch (che. bat) come segue:

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i
``` &001 


Questo cerca nella directory locale, prenderà un parametro del nome del file con o senza estensione, e restituirà la prima corrispondenza dalla directory corrente o nel PATH. 


Poi eseguilo come **`which cmd.exe`** per trovare il cmd.exe che verrà eseguito se si digita `cmd`.
1
1
1
2015-09-21 17:59:01 +0000

In PowerShell

(@($env:path.split(";")) + (pwd).Path) | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

si può facilmente convertire questo in un Cmdlet.

Un altro modo per ottenere questo risultato, come suggerito in una modifica:

get-command notepad.exe | select Source
1
1
1
2009-09-30 17:19:01 +0000

Se si vuole solo which , il progetto GnuWin32 ha un gruppo di unix utils con singoli installatori.

0
0
0
2020-01-19 15:42:25 +0000

Per me, quello che ha funzionato è stato

Get-Command chromedriver
``` ```
CommandType Name Version Source
----------- ---- ------- ------
Application chromedriver.exe 0.0.0.0 C:\WINDOWS\chromedriver.exe

che restituisce qualcosa come

&001

Sostituisci semplicemente chromedriver con il programma che stai cercando

0
0
0
2019-10-08 11:40:42 +0000

Heh, devo solo pubblicare questo file batch di Windows:

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

Un test:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\ssh.EXE
``` &001 


Non è un vero e proprio one-liner se si avvolge il codice in `setlocal enableextensions` e `endlocal`, che sono necessari per gli utenti che non hanno le estensioni abilitate di default.
0
0
0
2019-12-04 17:04:50 +0000

Se stai usando Powershell, where è qualcosa di totalmente diverso da cmd dove.

In powershell, tipo:

(Get-Command -powershell.exe).Path
0
0
0
2013-04-24 16:35:10 +0000

Se avete solo bisogno del percorso per lanciarlo, spesso è meglio usare il comando di avvio. Per esempio, si può usare “start chrome.exe” per avviare Chrom{e|ium}, indipendentemente da dove sia installato.