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

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

Je me suis souvenu que j'avais utilisé un outil appelé where pour trouver l'emplacement de tout programme exécutable comme celui-ci dans une console :

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

Maintenant je ne peux pas trouver cet outil. Vous n'êtes pas sûr que Windows dispose d'un outil intégré pour effectuer cette recherche ?

Réponses (12)

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

Selon la réponse de StackOverflow à Y a-t-il un équivalent de “qui” sur Windows ? , where.exe fait cela sur Windows 7 et Windows Server 2003 et ultérieur :

Exemple

C:\> where ping

Sortie :

C:\Windows\System32\PING.EXE

Dans powerhell utilisez where.exe, Get-Command (ou son abréviation gcm), car where est l'alias par défaut pour Where-Object.

23
23
23
2012-09-27 01:23:30 +0000

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

WHERE est la commande que vous recherchez ! WHERE est comme un croisement entre le shell UNIX intégré “which” et la commande “locate”, en ce sens qu'elle fonctionne à la fois pour les exécutables de commande et les fichiers ordinaires.

Elle est également un peu plus complexe que l'une ou l'autre de ces deux commandes, même si, en général, une simple commande

WHERE <file>

fonctionnera.

Elle est différente de la commande “locate” en ce sens qu'elle ne regarde pas à travers tout le système de fichiers. Au lieu de cela, le comportement par défaut est de chercher les fichiers à deux endroits :

  • Le répertoire courant.
  • 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 la variable PATH).

Si vous voulez chercher seulement dans la variable de chemin de commande, vous pouvez utiliser :

WHERE "$path:<search text>"

Si, d'autre part, 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, la commande WHERE trouvera les commandes et tous les fichiers avec une extension de la variable PATHEXT sans inclure l'extension. Tous les autres fichiers doivent être spécifiés soit exactement, soit avec des jokers.

Prenez 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

Elle réussit à renvoyer toutes les versions de “dxdiag.exe” car “.exe” est l'une des extensions de la variable PATHEXT. (Note : “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 joker 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 vous aidera !

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

utilisez dir :

cd \
dir /s /b mytool.exe

la partie cd utilisezdir` :

cd \
dir /s /b mytool.exe

la partie vous change à la racine du disque, pour assurer que la recherche commence au sommet de la hiérarchie.

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

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
3
3
3
2009-09-30 19:26:11 +0000

Sur Windows, vous pouvez utiliser l'utilitaire gratuit Moteur de recherche Everything pour rechercher instantanément tout fichier par son nom complet ou partiel (si votre disque dur est formaté en ntfs).

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

Frustrant que ce ne soit pas intégré comme une simple commande.

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

Créer un fichier batch (qui. 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

Ceci cherche 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 courant ou dans le PATH.

Puis lancez le comme which cmd.exe pour trouver le cmd.exe qui s'exécutera si vous tapez cmd.

1
1
1
2015-09-21 17:59:01 +0000

Dans PowerShell

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

Vous pouvez facilement convertir ceci en Cmdlet.

Une autre façon d'accomplir ceci, comme suggéré dans une édition :

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

Si vous voulez juste which , le projet GnuWin32 a un tas d'utils unix avec des installateurs individuels.

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

Pour moi, ce qui a fonctionné, c'est

Get-Command chromedriver

qui renvoie quelque chose comme

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

Il suffit de remplacer chromedriver par le programme que vous recherchez

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

Heh, je n'ai qu'à poster ce fichier de lot à une ligne 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 test :

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

Pas tout à fait une ligne de lot à une ligne si vous enveloppez le code dans setlocal enableextensions et endlocal, qui sont nécessaires pour les utilisateurs qui n'ont pas les extensions activées par défaut.

0
0
0
2019-12-04 17:04:50 +0000

Si vous utilisez Powershell, where est quelque chose de totalement différent de cmd’s où.

Dans powerhell, tapez :

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

Si vous avez juste besoin de la trajectoire pour le lancer, il est souvent préférable d'utiliser la commande de démarrage. Par exemple, vous pouvez utiliser “start chrome.exe” pour lancer Chrom{e|ium}, quel que soit l'endroit où il est installé.