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

¿Cómo encuentro la ubicación de un ejecutable en Windows?

Recordé que utilicé una herramienta llamada where para encontrar la ubicación de cualquier programa ejecutable como este en una consola:

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

Ahora no puedo encontrar esta herramienta. ¿No está seguro de si Windows tiene una herramienta incorporada para hacer esa búsqueda?

Respuestas (12)

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

Según la respuesta de StackOverflow en ¿Existe un equivalente de ‘cuál’ en Windows? , where.exe hace esto en Windows 7 y Windows Server 2003 y posteriores:

Ejemplo

C:\> where ping

Salida:

C:\Windows\System32\PING.EXE

En powershell usa where.exe, Get-Command (o su abreviatura gcm), ya que where es el alias por defecto de Where-Object.

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

Debería haber añadido, si no puedes usar el comando WHERE desde el símbolo del sistema, comprueba tu variable PATH. (Sólo usa el comando “path”.) Asegúrate de que C:\NWindows\N-System32 está en tu camino. Ahí es donde se encuentra “where.exe”.

WHERE es el comando que estás buscando! WHERE es como un cruce entre el shell de UNIX incorporado “which” y el comando “locate”, en el sentido de que funciona tanto para los ejecutables del comando como para los archivos regulares.

También es algo más complejo que cualquiera de esos dos, aunque, en general un simple

WHERE <file>

funcionará.

Es diferente del comando “locate” en el sentido de que no está buscando a través de todo el sistema de archivos. En su lugar, el comportamiento por defecto es buscar archivos en dos lugares:

  • El directorio actual.
  • Todos los directorios de la variable PATH.

Así que, cualquier comando que puedas ejecutar directamente desde un símbolo del sistema sin especificar el directorio, será encontrado por el comando WHERE. (Porque cualquier comando así ya está en la lista de variables PATH).

Si quieres buscar sólo en la variable PATH, puedes usar:

WHERE "$path:<search text>"

Si, por otro lado, quieres encontrar todas las copias de un archivo en un árbol de directorios, puedes usar:

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

Finalmente, WHERE encontrará los comandos y cualquier archivo con una extensión de la variable PATHEXT sin incluir la extensión. Todos los demás archivos deben ser especificados exactamente o con comodines.

Tomemos por ejemplo los archivos “dxdiag.exe” y “dxdiagn.dll”. Fíjese en el siguiente comando y su salida:

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

Consigue devolver todas las versiones de “dxdiag.exe” porque “.exe” es una de las extensiones de la variable PATHEXT. (Nota: “WHERE dxdiag” también habría funcionado, porque C:\Windows\System32 está en la variable PATH.)

WHERE /R C:\Windows dxdiagn

por otro lado, no devuelve ningún resultado, porque “.dll” es no en PATHEXT.

En este caso, mira el resultado que nos da la suma de un comodín:

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

Devuelve con éxito todas las versiones de dxdiagn.dll.

Para más información, usa “WHERE /?”. ¡Espero que esto ayude!

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

usa dir:

cd \
dir /s /b mytool.exe

la parte de cd usadir`:

cd \
dir /s /b mytool.exe

la parte de te cambia a la raíz de la unidad, para asegurar que la búsqueda comienza en la parte superior de la jerarquía.

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

Tengan en cuenta que algunas cosas pueden ser un poco diferentes para 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

En windows puedes usar la utilidad gratuita Motor de búsqueda de todo para buscar instantáneamente cualquier archivo por nombre completo o parcial (si tu disco duro está formateado en ntfs).

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

Es frustrante que no esté incorporado como un simple comando.

Sin embargo, hay varias soluciones, una de las cuales es un fichero por lotes.

Crear un fichero por lotes (que. bat) de la siguiente manera:

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

Este busca en el directorio local, tomará un parámetro de nombre de archivo con o sin extensión, y devolverá la primera coincidencia del directorio actual o en el PATH.

Luego ejecútelo como which cmd.exe para encontrar el cmd.exe que se ejecutará si escribe cmd.

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

En PowerShell

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

Puedes fácilmente convertir esto en un Cmdlet.

Otra forma de lograrlo, como se sugiere en una edición:

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

Si sólo quieres que , el proyecto GnuWin32 tiene un montón de utilidades unix con instaladores individuales.

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

Para mí, lo que funcionó fue

Get-Command chromedriver

que devuelve algo como

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

Simplemente reemplaza chromedriver con el programa que estás buscando

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

Je, sólo tengo que publicar este archivo por lotes de una línea 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

Una prueba:

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

No es exactamente una línea si envuelves el código en setlocal enableextensions y endlocal, que son necesarios para los usuarios que no tienen las extensiones habilitadas por defecto.

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

Si usas Powershell, where es algo totalmente diferente a donde están los cmd.

En Powershell, escribe:

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

Si sólo necesitas la ruta para lanzarlo, a menudo es mejor usar el comando de inicio. Por ejemplo, puedes usar “start chrome.exe” para iniciar Chrom{e|ium}, sin importar donde esté instalado.