Comment trouver l'emplacement d'un exécutable dans Windows?


154

Je me suis rappelé que j'avais utilisé un outil appelé as wherepour trouver les emplacements de tout programme exécutable de ce type dans une console:

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

Maintenant, je ne trouve pas cet outil. Vous ne savez pas si Windows dispose d'un outil intégré pour effectuer cette recherche?



SI l'application est en cours d'exécution et que vous devez connaître son emplacement, utilisez Process Explorer (à partir de Sys Internals).
Ganesh R.

6
wherea travaillé pour moi sur Windows 7 Enterprise
Bohemian

4
PAGING OP: Veuillez mettre à jour la réponse acceptée :)
Jake

1
@ David.Chu.ca s'il vous plaît mettre à jour la réponse acceptée
Matt Frear

Réponses:


351

Selon la réponse de StackOverflow à la page Existe-t-il un équivalent de "qui" sur Windows? , where.exeeffectue-t-il ceci sur Windows 7 et Windows Server 2003 et versions ultérieures:

Exemple

C:\> where ping

Sortie:

C:\Windows\System32\PING.EXE

19
Cela devrait être considéré comme la bonne réponse, car cela fonctionne sans installer de logiciel supplémentaire
Cookie

25
Une partie importante de cette réponse est que dans PowerShell, il wheres'agit d'un alias par défaut pour le Where-Object, vous devez donc plutôt utiliser where.exe, ou gcm/Get-Command
Dave Andersen

2
Qu'en est-il de PowerShell. Comment puis-je obtenir la même chose en PowerShell?
Krv

1
@krv Comme @DaveAndersen l'a mentionné, dans powershell, vous pouvez taper Get-Command ping(ou tout simplement gcm ping), ce qui vous donnera le chemin complet, ainsi que d'autres informations.
Sam

22

EDIT: J'aurais dû ajouter, si vous ne pouvez pas utiliser la commande WHERE à partir de l'invite de commande, vérifiez votre variable PATH. (Utilisez simplement la commande "path".) Assurez-vous que C: \ Windows \ System32 est bien dans votre chemin. C'est là que se trouve "where.exe".

O est la commande que vous recherchez! WHERE est comme un croisement entre le "shell" intégré dans le shell UNIX et la commande "localiser", en ce sens que cela fonctionne pour les exécutables de commande et les fichiers normaux.

C’est aussi un peu plus complexe que l’un ou l’autre, même si, en général, un simple

WHERE <file>

marchera.

Il diffère de la commande "localiser" en ce sens qu'il ne parcourt pas tout le système de fichiers. Au lieu de cela, le comportement par défaut consiste à rechercher des fichiers dans deux emplacements:

  • Le répertoire en cours.
  • Tous les répertoires de la variable PATH.

Ainsi, toute commande que vous pouvez exécuter directement à partir d'une invite de commande sans spécifier le répertoire sera trouvée par la commande WHERE. (Parce que toute commande de ce type est déjà dans la liste de variables PATH.)

Si vous souhaitez rechercher uniquement dans la variable de chemin de commande, vous pouvez utiliser:

WHERE "$path:<search text>"

Si, par contre, vous voulez trouver toutes les copies d'un fichier dans une arborescence de répertoires, vous pouvez utiliser:

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

Enfin, WHERE trouvera les commandes et tous les fichiers portant l’extension de la variable PATHEXT sans inclure l’extension. Tous les autres fichiers doivent être spécifiés exactement ou avec des caractères génériques.

Prenons par exemple les fichiers "dxdiag.exe" et "dxdiagn.dll". Notez la commande suivante et sa sortie:

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

Toutes les versions de "dxdiag.exe" sont renvoyées car ".exe" est l'une des extensions de la variable PATHEXT. (Remarque: "WHERE dxdiag" aurait également fonctionné, car C: \ Windows \ System32 est dans la variable PATH.)

WHERE /R C:\Windows dxdiagn

d'autre part, ne renvoie aucun résultat, car ".dll" n'est pas dans PATHEXT.

Dans ce cas, regardez le résultat que l'ajout d'un caractère générique nous donne:

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

Il renvoie avec succès toutes les versions de dxdiagn.dll.

Pour plus d'informations, utilisez "WHERE /?". J'espère que cela t'aides!


2
where where C:\Windows\System32\where.exe:)
vp_arth

1
@vp_arth pensait justement exactement la même chose :)
Ingénieur inversé

10

utiliser dir:

cd \
dir /s /b mytool.exe

la cd \pièce vous change à la racine du lecteur, pour que la recherche commence en haut de la hiérarchie.


Cela ressemble à faire une ligne de commande Windows Search.
Ganesh R.

5
Cela fait une recherche récursive du lecteur et prendrait une éternité.
Djhowell

6
La seule façon de trouver des exécutables qui NE SONT PAS dans la variable d’environnement PATH est de le faire. Il n'a jamais précisé son chemin, il a dit n'importe quel exécutable .
John T

il trouve l'exécutable mais prend un certain temps.
Michael Z

cela ne fonctionne bien sûr que si vous connaissez le nom de l'exécutable ou au moins une partie du nom
Oliver Williams

9

Notez que certaines choses peuvent être un peu différentes pour 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

Merci, cela fonctionne pour cmd et PowerShell
Ding-Yi Chen

3

Frustrant qu'il ne s'agisse pas d'une commande simple.

Cependant, il existe plusieurs solutions, dont l'une est un fichier de commandes .

Créez un fichier de commandes (which.bat) comme suit:

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

Cela recherche dans le répertoire local, prend un paramètre de nom de fichier avec ou sans extension et retourne la première correspondance du répertoire en cours ou dans le chemin PATH.

Puis lancez-le comme which cmd.exepour trouver le cmd.exe qui s’exécutera si vous tapez cmd.


3

Sur Windows, vous pouvez utiliser le moteur de recherche gratuit Everything pour rechercher instantanément tous les fichiers par leur nom complet ou partiel (si votre disque dur est formaté en ntfs).


1
Nuit et jour différence entre cela et Windows Search.
AnthonyVO


1

Dans PowerShell

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

Vous pouvez facilement convertir cela en une applet de commande.

Une autre façon de réaliser cela, comme suggéré dans une édition:

get-command notepad.exe | select Source

0

Si vous avez juste besoin du chemin pour le lancer, il est souvent préférable d’utiliser la commande start. Par exemple, vous pouvez utiliser "start chrome.exe" pour démarrer Chrom {e | ium}, quel que soit son emplacement d'installation.


0

Heh, je dois juste poster le fichier batch One Liner de 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 examen:

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

Pas tout à fait une doublure si vous enveloppez le code setlocal enableextensionset endlocalqui sont nécessaires pour les utilisateurs qui ne possèdent pas les extensions activées par défaut.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.