Wie kann ich "welche <binary>" in cmd.exe

10

Gibt es eine Möglichkeit, schnell festzustellen, wo sich eine Binärdatei befindet (auf die die %PATH%Variable zeigt)?

Das ist etwas, was dem which perleiner traditionellen Unix-Shell entspricht.

Ich verstehe, dass das Resource Kit einen whereBefehl hat, aber dieses Kit ist nicht auf meinem (Unternehmens-) Computer installiert, daher kann ich es nicht verwenden where.

René Nyffenegger
quelle

Antworten:

14

Ein cmd.exe-Einzeiler für whichwäre:

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

Sie können es als einfaches which.bat codieren:

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

BEARBEITEN: Es erfordert den vollständigen Namen der Binärdatei : which perl.exe, nicht which perl. Es ist möglich, eine Batch-Datei zu schreiben, die% PATHEXT% berücksichtigt, sodass nicht der vollständige Name der Binärdatei erforderlich ist. Bitte lassen Sie mich wissen, wenn Sie es brauchen.

EDIT2: Trotzdem habe ich beschlossen, die Batch-Datei zu schreiben. Hier ist es:

@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

Zunächst wird gemäß Bobs Vorschlag geprüft, ob die Binärdatei im aktuellen Verzeichnis vorhanden ist. Wenn die Binärdatei nicht gefunden wird, wird eine weitere Schleife ausgeführt, die die Variable% PATH% durchsucht.

Schleifen basieren auf if ... goto, forBefehl wird nur verwendet, um den extWert durch ';' zu teilen. Charakter. Dem Wert von %PATHEXT%wird eine leere Erweiterung vorangestellt, mit der nach vollständig benannten Binärdateien gesucht werden kann - beides which perlund which perl.exefunktioniert.

MBu
quelle
1
Wenn Sie am Ende eine erweiterte Batch-Datei schreiben, können Sie dies auch ganz .\binary.*zuerst überprüfen . Das Betriebssystem sucht immer zuerst im aktuellen Verzeichnis, bevor es die Verzeichnisse im Befehlspfad durchsucht.
Bob