Ein cmd.exe-Einzeiler which
wäre:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Sie können es als simple which.bat kodieren:
@echo off for %%G in (%1) do @echo.%%~$PATH:G
BEARBEITEN: erfordert den vollständigen Namen der Binärdatei: which perl.exe
nicht which perl
. Es ist möglich, eine Stapeldatei zu schreiben, die% PATHEXT% berücksichtigt, sodass der vollständige Name der Binärdatei nicht benötigt wird. Bitte lassen Sie mich wissen, wenn Sie es brauchen.
EDIT2: trotzdem habe ich mich entschieden, die Batchdatei 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 andere Schleife ausgeführt, die die Suche durch die Variable% PATH% durchführt.
Schleifen basieren auf if ... goto
, der for
Befehl wird nur verwendet, um den ext
Wert durch ';' zu teilen. Charakter. Dem Wert von %PATHEXT%
wird eine leere Erweiterung vorangestellt, die die Suche nach vollständig benannten Binärdateien ermöglicht - beides which perl
und which perl.exe
funktioniert.