Como a veces tengo problemas de ruta, donde uno de mis propios scripts cmd está oculto (sombreado) por otro programa (anteriormente en la ruta), me gustaría poder encontrar la ruta completa a un programa en la línea de comandos de Windows, dado solo su nombre
¿Hay un equivalente al comando UNIX 'which'?
En UNIX, which command
imprime la ruta completa del comando dado para encontrar y reparar fácilmente estos problemas de sombreado.
which
comando en Unix estándar. La utilidad POSIX estype
. El C Shell tiene un comando que, y algunos sistemas lo tienen como un ejecutable externo. Por ejemplo, en Debian Linux,which
proviene de un paquete llamadodebutils
. Este externowhich
no "ve" las funciones, los alias o las funciones integradas del shell.type
hace; Bashtype
tiene una opción para suprimir eso y solo hacer una búsqueda de ruta.Respuestas:
Windows Server 2003 y posterior (es decir, cualquier cosa posterior a Windows XP de 32 bits) proporciona el
where.exe
programa que hace algo de lo quewhich
hace, aunque coincide con todos los tipos de archivos, no solo con los comandos ejecutables. (No coincide con los comandos de shell integrados comocd
.) Incluso aceptará comodines, por lo quewhere nt*
busca todos los archivos en su%PATH%
directorio actual cuyos nombres comienzan connt
.Intenta
where /?
pedir ayuda.Tenga en cuenta que Windows PowerShell se define
where
como un alias para elWhere-Object
cmdlet , por lo que si lo deseawhere.exe
, debe escribir el nombre completo en lugar de omitir la.exe
extensión.fuente
where.exe
no es un armazón incorporado, debe tenerlo%windir%\system32
en su%PATH%
, lo cual puede no ser el caso, ya que el usowhere
sugiere que puede estar trabajando en problemas con su camino.Si bien las versiones posteriores de Windows tienen un
where
comando, también puede hacerlo con Windows XP utilizando los modificadores de variables de entorno, de la siguiente manera:No necesita herramientas adicionales y no se limita a,
PATH
ya que puede sustituir cualquier variable de entorno (en el formato de ruta, por supuesto) que desee utilizar.Y, si desea una que pueda manejar todas las extensiones en PATHEXT (como lo hace Windows), esta es la solución:
En realidad, devuelve todas las posibilidades, pero puede ajustarlo con bastante facilidad para reglas de búsqueda específicas.
fuente
which
copia de seguridad en los días W95 / DOS, el orden de búsqueda fue - dir actual, luego cada directorio de ruta, para cmd.com, luego cmd.exe, luego cmd.bat Entonces, incluso cmd.bat en el directorio actual es ejecutado befroe cmd.exe soemwhere en el camino@echo off for %%i in (%1) do @echo. %%~$PATH:%i
para agregarlo a un script alias.bat que carga cada vez que ejecuta cmd.exe (coloque el script anterior en un nuevo directorio llamado C: \ usr \ alias):DOSKEY which=C:\usr\aliases\which.bat $*
luego puede hacer un script para iniciar cmd.exe con el archivo alias.bat:cmd.exe /K E:\usr\aliases\alias.bat
En PowerShell,
Get-Command
encontrará archivos ejecutables en cualquier lugar$Env:PATH
.También encuentra cmdlets de PowerShell, funciones, alias, archivos con los ejecutables personalizados extensiones vía
$Env:PATHEXT
, etc. definidos para el shell actual (bastante similar a golpe detype -a foo
) - por lo que es mejor ir a que otras herramientas comowhere.exe
,which.exe
, etc., que no son conscientes de estos Comandos de PowerShell.Encontrar ejecutables usando solo una parte del nombre
Encontrar ejecutables personalizados
Para buscar otros ejecutables que no sean de Windows (python, ruby, perl, etc.), las extensiones de archivo para esos ejecutables deben agregarse a la
PATHEXT
variable de entorno (por defecto.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
) para identificar archivos con estas extensionesPATH
como ejecutables. ComoGet-Command
también respeta esta variable, se puede ampliar para enumerar ejecutables personalizados. p.ejPuede configurar rápidamente un alias con
sal which gcm
(forma abreviada deset-alias which get-command
).Se puede encontrar más información y ejemplos en la ayuda en línea de
Get-Command
.fuente
.BAT
,.CMD
, etc.), se consideran ejecutable debido a que sus extensiones se nombran en laPATHEXT
variable (que por defecto esPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
). Se pueden agregar otros tipos de ejecutables (por ejemplo.py
,.rb
etc.) agregando la extensión de archivo y creando una asociación ejecutable conassoc
/ftype
- por ejemplo, docs.python.org/3.3/using/…En Windows PowerShell:
fuente
Si tiene instalado PowerShell (que recomiendo), puede usar el siguiente comando como un equivalente aproximado (nombre de programa sustituto para el nombre de su ejecutable):
Más está aquí: ¡ My Manwich! PowerShell que
fuente
($Env:Path).Split(";") | Get-ChildItem -filter programName*
es tan fácil de escribir ... ;-)Las herramientas GnuWin32 tienen
which
, junto con una gran cantidad de otras herramientas de Unix.fuente
En
which
llamadas CMD de Windowswhere
:fuente
Cygwin es una solución. Si no le importa usar una solución de terceros, entonces Cygwin es el camino a seguir.
Cygwin le brinda la comodidad de * nix en el entorno de Windows (y puede usarlo en el shell de comandos de Windows, o usar el shell * nix de su elección). Le da una gran cantidad de comandos * nix (como
which
) para Windows, y puede incluir ese directorio en suPATH
.fuente
En PowerShell, es
gcm
, que proporciona información formateada sobre otros comandos. Si desea recuperar solo la ruta al ejecutable, use.Source
.Por ejemplo:
gcm git
o(gcm git).Source
Cositas:
gcm
es un alias deGet-Command
cmdlet .Set-Alias which gcm
y usarlo como:(which git).Source
.fuente
Tengo una función en mi perfil de PowerShell llamada 'which'
Así es como se ve la salida:
fuente
> get-command app.exe | format-list
funcionó perfectamente!Obtenga unxutils desde aquí: http://sourceforge.net/projects/unxutils/
Gold en las plataformas de Windows, pone todas las buenas utilidades de Unix en un DOS de Windows estándar. Lo he estado usando por años.
Tiene un 'que' incluido. Tenga en cuenta que es sensible a mayúsculas y minúsculas sin embargo.
NB: para instalarlo, explote el zip en algún lugar y agregue ... \ UnxUtils \ usr \ local \ wbin \ a la variable env de la ruta del sistema.
fuente
.
para el \ r. ¡Sin embargo, es una solución del 99%!No está en stock en Windows, pero es proporcionado por Services for Unix y hay varios scripts de lotes simples que logran lo mismo que este .
fuente
Si puede encontrar un compilador gratuito de Pascal, puede compilar esto. Al menos funciona y muestra el algoritmo necesario.
fuente
my_funk;
es necesaria. Gracias por publicar un programa Pascal, ¡me recuerda a mi juventud! Es una pena que Pascal no haya evolucionado.La mejor versión de esto que he encontrado en Windows es la utilidad "whereis" de Joseph Newcomer, que está disponible (con fuente) en su sitio .
Vale la pena leer el artículo sobre el desarrollo de "whereis".
fuente
Primero puede instalar Git desde Downloading Git , y luego abrir Git Bash y escribir:
fuente
Ninguno de los puertos Win32 de Unix que pude encontrar en Internet es satisfactorio, porque todos tienen uno o más de estos inconvenientes:
Así que finalmente escribí el mío, que admite todo lo anterior correctamente.
Disponible allí: http://jf.larvoire.free.fr/progs/which.exe
fuente
Este archivo por lotes utiliza el manejo de variables CMD para encontrar el comando que se ejecutaría en la ruta. Nota: que el directorio actual siempre se realiza antes de la ruta) y, dependiendo de qué llamada API se use, se buscan otras ubicaciones antes / después de la ruta.
Ver
set /?
para ayuda.fuente
Estoy usando GOW (GNU en Windows), que es una versión ligera de Cygwin. Puedes obtenerlo de GitHub aquí .
Una captura de pantalla de una lista de comandos incluidos en GOW:
fuente
He creado una herramienta similar a Ned Batchelder:
Buscar archivos .dll y .exe en PATH
Si bien mi herramienta es principalmente para buscar varias versiones de dll, muestra más información (fecha, tamaño, versión) pero no utiliza PATHEXT (espero actualizar mi herramienta pronto).
fuente
Solo tengo que publicar este archivo por lotes de un revestimiento de Windows:
Una prueba:
No es una frase si envuelve el código
setlocal enableextensions
yendlocal
.fuente
Para ustedes, usuarios de Windows XP (que no tienen un
where
comando incorporado), he escrito un comando "como" como un rubygem llamadowhichr
.Para instalarlo, instale Ruby.
Entonces
Ejecútalo como:
C:> cuál cmd_aquí
fuente
TCC y TCC / LE de JPSoft son reemplazos de CMD.EXE que agregan una funcionalidad significativa. Relevante para la pregunta del OP,
which
es un comando integrado para los procesadores de comando de la familia TCC.fuente
He usado el
which
módulo de npm durante bastante tiempo y funciona muy bien: https://www.npmjs.com/package/which Es una gran alternativa multiplataforma.Ahora cambié a la
which
que viene con Git. Simplemente agregue a su camino el/usr/bin
camino desde Git, que generalmente está enC:\Program Files\Git\usr\bin\which.exe
. Elwhich
binario estará enC:\Program Files\Git\usr\bin\which.exe
. Es más rápido y también funciona como se esperaba.fuente
prueba esto
fuente