it-swarm-eu.dev

Come posso trovare la posizione di un eseguibile in Windows?

Mi sono ricordato che ho usato uno strumento chiamato where per trovare posizioni per 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 se Windows ha uno strumento integrato per fare quella ricerca?

128
David.Chu.ca

Penso che potresti pensare al comando which in Linux.

$ which bash
/bin/bash

Non sono a conoscenza di uno strumento equivalente in Windows.

EDIT: Ho appena ricordato che c'è un pacchetto chiamato Unix Utils per Windows che fornirebbe questa funzionalità per voi.

3
djhowell

Secondo la risposta StackOverflow a Esiste un equivalente di "which" su Windows? , where.exe esegue questa operazione su Windows 7 e Windows Server 2003 e versioni successive:

Esempio

C:\> where ping

Produzione:

C:\Windows\System32\PING.EXE
301
Simon D

EDIT: Avrei dovuto aggiungere, se non è possibile utilizzare il comando WHERE dal comando Prompt, controllare la variabile PATH. (Basta usare il comando "percorso".) Assicurati che C:\Windows\System32 sia nel tuo percorso. Ecco dove si trova "where.exe".

DOVE è il comando che stai cercando! WHERE è come una croce tra il comando "which" e il comando "locate" della shell UNIX, in quanto funziona sia per i comandi eseguibili che per i file normali.

È anche un po 'più complesso di uno di questi due, anche se, in generale, è semplice

WHERE <file>

funzionerà.

È diverso dal comando "locate" in quanto non sta guardando attraverso l'intero filesystem. Invece, il comportamento predefinito è cercare i file in due posizioni:

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

Quindi, qualsiasi comando che è possibile eseguire direttamente da un comando Prompt senza specificare la directory, verrà trovato dal comando WHERE. (Perché qualsiasi comando del genere è già presente nell'elenco delle variabili PATH.)

Se vuoi cercare solo nella variabile del percorso del comando, puoi usare:

WHERE "$path:<search text>"

Se, al contrario, si desidera trovare tutte le copie di un file in un albero di directory, è possibile utilizzare:

WHERE /R <Top Level Directory> <search text>

Infine, WHERE troverà i comandi e tutti i file con un'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". Nota il seguente comando e il suo output:

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

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

WHERE /R C:\Windows dxdiagn

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

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

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

Restituisce correttamente all versioni di dxdiagn.dll.

Per ulteriori informazioni, utilizzare "WHERE /?". Spero che questo ti aiuti!

19
geo

usa dir:

cd \
dir /s /b mytool.exe

la parte cd \ cambia nella root dell'unità, per garantire che la ricerca inizi nella parte superiore della gerarchia.

10
John T

Nota che alcune cose potrebbero essere leggermente 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
7
Rob Jens

Frustrante che non sia incorporato come un semplice comando.

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

Creare un file batch (which.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 

Questo appare nella directory locale, prenderà un parametro filename con o senza un'estensione e restituirà la prima corrispondenza dalla directory corrente o nel PATH.

Quindi eseguirlo comewhich cmd.exeper trovare il cmd.exe che verrà eseguito se si digita cmd.

3
b w

Su Windows puoi usare l'utilità gratuita Tutto il motore di ricerca per cercare immediatamente per qualsiasi file con il nome completo o parziale (se il tuo disco rigido è formattato in ntfs).

3
harrymc

In PowerShell

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

Puoi facilmente convertirlo in un cmdlet.

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

get-command notepad.exe | select Source
1
Anupam

Se si desidera solo which , il GnuWin32 project ha un gruppo di utilità Unix con i singoli programmi di installazione.

1
Justin Love

Se hai solo bisogno del percorso per avviarlo, spesso è meglio usare il comando start. Ad esempio, è possibile utilizzare "start chrome.exe" per avviare Chrom {e | ium}, indipendentemente da dove è installato.

0
Anonymous Coward