Como posso "que"em cmd.exe

Como posso "que"em cmd.exe

Existe uma maneira de determinar rapidamente onde um binário (para o qual a %PATH%variável aponta) está localizado.

Isso é algo que faria o equivalente which perla um shell unix tradicional.

Eu entendi aquiloO kit de recursostem um wherecomando, mas este kit não está instalado no meu computador (corporativo), então não posso usar o where.

Responder1

Uma linha única de cmd.exe whichseria:

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

Você pode codificá-lo como um simples which.bat:

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

EDIT: requer nome completo do binário: which perl.exe, não which perl. É possível escrever um arquivo em lote que leve em consideração %PATHEXT%, portanto não precisa do nome completo do binário. Por favor, deixe-me saber se você precisar.

EDIT2: de qualquer forma decidi escrever o arquivo em lote. Aqui 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

Primeiro, conforme sugestão de Bob, ele verifica se o binário existe no diretório atual. Caso o binário não seja encontrado, é executado outro loop que faz a busca através da variável %PATH%.

Os loops são baseados em if ... goto, foro comando é usado apenas para dividir o extvalor por ';' personagem. O valor de %PATHEXT%é anexado a uma extensão vazia, que permite a pesquisa de binários totalmente nomeados - ambos which perle which perl.exefunciona.

Responder2

Você poderia experimentar a coleção de utilitários de Paul Sadowski - ele inclui um arquivo which. Veja em:http://www.paulsadowski.com/wsh/cmdprogs.htm

informação relacionada