Come posso "quale <binary>" in cmd.exe


10

C'è un modo per determinare rapidamente dove si trova un binario (a cui %PATH%punta la variabile).

Questo è qualcosa che farebbe l'equivalente di which perluna shell unix tradizionale.

Comprendo che Il kit di risorse ha un wherecomando, ma questo kit non è installato sul mio computer (aziendale), quindi non posso utilizzarlo where.

Risposte:


14

Un cmd.exe one-liner per whichsarebbe:

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

Puoi codificarlo come un semplice which.bat:

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

EDIT: richiede il nome completo di binary:, which perl.exeno which perl. È possibile scrivere un file batch che prende in considerazione% PATHEXT%, quindi non necessita del nome completo di binario. Per favore fatemi sapere se ne avete bisogno.

EDIT2: comunque ho deciso di scrivere il file batch. Ecco qui:

@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

In primo luogo, come suggerito da Bob, verifica se il binario esiste nella directory corrente. Se il binario non viene trovato, viene eseguito un altro ciclo che esegue la ricerca attraverso la variabile% PATH%.

I loop sono basati su if ... goto, il forcomando viene utilizzato solo per dividere il extvalore per ';' carattere. Il valore di %PATHEXT%è anteposto con un'estensione vuota, che consente di cercare binari con nome completo - entrambi which perle which perl.exefunziona.


1
Bene, se finisci per scrivere un file batch esteso, potresti anche andare fino in fondo e controllare .\binary.*prima. Il sistema operativo cerca sempre prima nella directory corrente, prima di cercare le directory nel percorso del comando.
Bob,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.