Ein cmd.exe-Einzeiler für which
wä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
, for
Befehl wird nur verwendet, um den ext
Wert 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 perl
und which perl.exe
funktioniert.
.\binary.*
zuerst überprüfen . Das Betriebssystem sucht immer zuerst im aktuellen Verzeichnis, bevor es die Verzeichnisse im Befehlspfad durchsucht.