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?
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.
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:
C:\> where ping
C:\Windows\System32\PING.EXE
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:
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!
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.
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
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.exe
per trovare il cmd.exe che verrà eseguito se si digita cmd
.
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).
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
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.