¿Cómo puedo "which <binary>" en cmd.exe


10

¿Hay alguna manera de determinar rápidamente dónde se encuentra un binario (al que %PATH%apunta la variable)?

Eso es algo que haría el equivalente de which perlen un shell tradicional de Unix.

Entiendo que el Kit de recursos tiene un wherecomando, pero este kit no está instalado en mi computadora (corporativa), por lo que no puedo usarlo where.

Respuestas:


14

Un cmd.exe de una línea whichsería:

for %G in (<binary.exe>) do @echo.%~$PATH:G

Puede codificarlo como un simple which.bat:

@echo off
for %%G in (%1) do @echo.%%~$PATH:G

EDITAR: requiere el nombre completo del binario: which perl.exeno which perl. Es posible escribir un archivo por lotes que tenga en cuenta% PATHEXT%, por lo que no necesita el nombre completo del binario. Avísame si lo necesitas.

EDIT2: de todos modos, decidí escribir el archivo por lotes. Aquí está:

@echo off
setlocal enabledelayedexpansion

set ext= ;%PATHEXT%
:extloop1
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
  if exist %1%%A (
    echo .\%1%%A
    goto finish
  )
  set ext=%%B
)
if "!ext!" neq "" goto extloop1

set ext= ;%PATHEXT%
:extloop2
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
  for %%C in (%1%%A) do (
    if exist %%~$PATH:C (
      echo %%~$PATH:C
      goto finish
    )
  )
  set ext=%%B
)
if "!ext!" neq "" goto extloop2

:finish
endlocal

Primero, según la sugestión de Bob, verifica si el binario existe en el directorio actual. Si no se encuentra el binario, se ejecuta otro bucle que realiza la búsqueda a través de la variable% PATH%.

Los bucles se basan en if ... goto, el forcomando se usa solo para dividir el extvalor entre ';' personaje. El valor de %PATHEXT%se antepone con una extensión vacía, lo que permite buscar binarios con nombre completo, ambos which perly which perl.exefunciona.


1
Bueno, si termina escribiendo un archivo por lotes extendido, también podría ir y verificar .\binary.*primero. El sistema operativo siempre busca primero en el directorio actual, antes de buscar los directorios en la ruta del comando.
Bob

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.