Windows equivalente de whereis?


164

¿Existe un equivalente del comando Unix whereis en Windows?

Para poder averiguar dónde están realmente los comandos que puedo ejecutar.

Respuestas:


203

El comando where hace lo que desea y vuelve al menos al kit de recursos para Windows 98, y se incluye de manera predeterminada en Server 2003, Vista y versiones posteriores:

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

Si se ejecuta sin argumentos (en Vista), da como resultado uno de mis mensajes favoritos:

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

Si se ejecuta en PowerShell, asegúrese de incluir '.exe' para distinguir de cualquier alias o script 'where' a lo largo de la ruta. ('where' es un alias típico de Where-Object.ps1)

C:\> where.exe where.exe
C:\Windows\System32\where.exe

44
Todos los días aprendo algo nuevo ...
Rubens Mariuzzo

44
Un poco triste wheresolo devuelve la ayuda de uso ahora en Windows 7. Quería verlo por mí mismo: p
Svish

2
whereno disponible en XP
Tom Roggero

1
@TomRoggero, podría haber sido más claro. Es parte del kit de recursos opcional que comienza con Windows 98, y solo se incluye en la instalación base para la versión posterior a XP.
Kevin

7

hackerish which.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) 
)

1
Esta es una buena solución para sistemas más antiguos, pero debe saber que da como resultado algunas peculiaridades. Coincide con los directorios, solo devuelve el primer resultado encontrado en la ruta para cada extensión y debe incluir todas las extensiones encontradas en la variable de entorno PATHEXT.
Kevin

yah, esto es un poco más viejo truco mío, cuando me pegué aquí i al instante vi el potencial de PATHEXT%% :)
Akira

7

Por favor, use el comando where :

> where app.exe

Es la mejor manera de lograr tu objetivo.

También puede usar el comando PowerShell:

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

y la versión ampliada se ve así:

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

3

En algún lugar "allá afuera" encontré este archivo por lotes whereis.bat:

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

Actualización: tal vez lo encontré aquí .



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; 
}

Ejemplo:

PS> encontrar Mozilla.admx

    Directory: C:\Windows\PolicyDefinitions                                                                                     

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

PS> whereis firefox.exe

    Directory: C:\Program Files\Mozilla Firefox                                                                                 

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

0

Estaba buscando esto hoy y como estoy en XP sin el kit de recursos, recurrí a powershell con el siguiente comando:

dir -path c:\ -filter ffmpeg.* -r

No soy competente en PowerShell, pero parece que estás buscando en todo el árbol de directorios. Esto no es equivalente a lo whereque solo busca en el %PATH%. Además, es mucho más lento y da errores para carpetas que no tiene permiso de lectura
phuclv

De acuerdo ... No necesitaba una copia exacta de la funcionalidad, solo la capacidad de localizar un programa.
KalenGi

-1

Puede intentar buscar el comando usando lo siguiente:

dir /s type-whatever-you-are-searching

Esto no funciona para mi. Por ejemplo, el comando exp está en mi ruta, pero dir / s exp o dir / s exp.exe solo muestra "Archivo no encontrado".
bobmcn

55
Esto funcionaría si a) busca desde la raíz de la unidad, b) su ruta está en una sola unidad yc) su ruta está en orden lexicográfico. Incluso en estas condiciones, será ridículamente lento.
Kevin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.