Usuario del software
2009-09-30 17:06:38 +0000 2009-09-30 17:06:38 +0000

Respuestas [12]

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.

380
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 

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:"

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

WHERE /R  

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!

23
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.

10
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
9
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
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.

3
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
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
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
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
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.

0