L'équivalent Windows de Whereis?

164

Existe-t-il un équivalent de la commande Unix whereis dans Windows?

Pour que je puisse savoir où sont réellement les commandes que je peux exécuter.

Svish
la source

Réponses:

203

La commande where fait ce que vous voulez et renvoie au moins au kit de ressources pour Windows 98; elle est incluse par défaut dans Server 2003, Vista et les versions plus récentes:

C:\>where csc
C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe

S'il est exécuté sans arguments (sous Vista), l'un de mes messages favoris est le suivant:

C:\>where
ERROR: The operation completed successfully.

Si vous exécutez PowerShell, veillez à inclure ".exe" pour le distinguer des alias ou des scripts "où" situés le long du chemin. ('Où' est un alias typique de Where-Object.ps1)

C:\> where.exe where.exe
C:\Windows\System32\where.exe
Kevin
la source
4
Chaque jour, j'apprends quelque chose de nouveau ...
Rubens Mariuzzo
4
Un peu triste, wheretout simplement, retourne maintenant l'aide à l'utilisation dans Windows 7. Je voulais le voir moi-même: p
dimanche
2
wherenon disponible dans XP
Tom Roggero
1
@ TomRoggero, j'aurais pu être plus clair. Cela fait partie du kit de ressources facultatif commençant par Windows 98 et inclus uniquement dans l'installation de base pour les versions ultérieures à XP.
Kevin
7

hackerish qui.cmd:

@echo off
@set PATH=.;%PATH%

@rem 
@rem about:  something similar like the unix-alike-which, but with
@rem         within pure cmd
@rem 

if "%1" == "" (
    @echo Usage: 
    @echo.
    @echo   which 'cmd'
    @echo.
    @echo.if 'cmd' is not found, ERRORLEVEL is set to 1
    @echo.  
) else (
    ( @for %%f in (%1 %1.exe %1.cmd %1.bat %1.pif) do if not "%%~$PATH:f" == "" ( @echo %%~$PATH:f ) else @set ERRORLEVEL=1) 
)
Akira
la source
1
Ceci est une bonne solution pour les systèmes plus anciens, mais vous devez savoir que cela entraîne quelques problèmes. Elle correspond aux répertoires, renvoie uniquement le premier résultat trouvé dans le chemin d'accès pour chaque extension et doit inclure toutes les extensions trouvées dans la variable d'environnement PATHEXT.
Kevin
yah, c'est un peu plus vieux hack de moi, quand je l'ai collé ici, j'ai immédiatement vu le potentiel de% PATHEXT% :)
akira
7

S'il vous plaît, utilisez commande:

> where app.exe

C'est le meilleur moyen d'atteindre votre objectif.

Vous pouvez également utiliser la commande PowerShell:

> $env:path.Split(';') | gci -Filter app.exe

et la version étendue ressemble à ceci:

 > $env:path.Split(';') | select -Unique | ? {$_ -and (test-path $_)} | gci -Filter app.exe
Abeille Arek
la source
3

Quelque part "là-bas", j'ai trouvé ce fichier de commandes whereis.bat:

@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i

Mise à jour: peut-être que je l'ai trouvé ici .

Craig McQueen
la source
1
function find ($string) { 
   Get-ChildItem -Path 'c:\' -Recurse -Filter $string; 
}

function whereis ($string) { 
   $superpath = "$env:Path;C:\Program Files;C:\Program Files (x86)";
   (echo $superpath).Split(';') | Get-ChildItem -Recurse -Filter $string; 
}

Exemple:

PS> trouver Mozilla.admx

    Directory: C:\Windows\PolicyDefinitions                                                                                     

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        1/27/2016  12:22 PM          37146 Mozilla.admx                                                                   

PS> où est firefox.exe

    Directory: C:\Program Files\Mozilla Firefox                                                                                 

Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        9/21/2017   5:30 PM         477136 firefox.exe        
Rupert
la source
0

Je cherchais ceci aujourd'hui et comme je suis sur XP sans le kit de ressources, je me suis tourné vers powershell avec la commande suivante:

dir -path c:\ -filter ffmpeg.* -r
KalenGi
la source
Je ne suis pas compétent en PowerShell, mais il semble que vous cherchiez dans tout l'arborescence de répertoires. Ce n'est pas équivalent à wherece que seulement les recherches dans le %PATH%. De plus, il est beaucoup plus lent et
génère des
D'accord ... Je n'avais pas besoin d'une copie exacte de la fonctionnalité, mais simplement de la possibilité de localiser un programme.
KalenGi
-1

Vous pouvez essayer de rechercher la commande en utilisant les éléments suivants:

dir /s type-whatever-you-are-searching
Shakeel
la source
Cela ne fonctionne pas pour moi. Par exemple, la commande exp est dans mon chemin, mais dir / s exp ou dir / s exp.exe ne donne que "Fichier introuvable".
bobmcn
5
Cela fonctionnerait si a) vous effectuez une recherche à partir de la racine du lecteur, b) votre chemin est sur un seul lecteur et c) votre chemin est dans l’ordre lexicographique. Même dans ces conditions, il sera ridiculement lent.
Kevin