¿Cómo puedo "cuál" en cmd.exe

¿Cómo puedo "cuál" en cmd.exe

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

Eso es algo que sería equivalente which perla un shell Unix tradicional.

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

Respuesta1

Un resumen de cmd.exe whichsería:

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

Puedes 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. Por favor avíseme si lo necesita.

EDITAR2: de todos modos decidí escribir el archivo por lotes. Aquí lo tienes:

@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 sugerencia 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, forel comando se usa solo para dividir el extvalor por ';' personaje. El valor de %PATHEXT%va precedido de una extensión vacía, lo que permite buscar binarios con nombre completo: ambos which perly which perl.exefunciona.

Respuesta2

Podrías probar la colección de utilidades de Paul Sadowski: incluye un archivo which. Véalo en:http://www.paulsadowski.com/wsh/cmdprogs.htm

información relacionada