Jednowierszowy program cmd.exe which
mógłby być:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Możesz to zakodować w prosty sposób. Bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDYCJA: wymaga pełnej nazwy pliku binarnego:, which perl.exe
nie which perl
. Możliwe jest napisanie pliku wsadowego, który uwzględnia% PATHEXT%, więc nie potrzebuje pełnej nazwy pliku binarnego. Daj mi znać, jeśli będziesz tego potrzebować.
EDIT2: w każdym razie postanowiłem napisać plik wsadowy. Oto on:
@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
Po pierwsze, zgodnie z sugestią Boba, sprawdza, czy plik binarny istnieje w bieżącym katalogu. Jeśli plik binarny nie zostanie znaleziony, wykonywana jest kolejna pętla, która przeszukuje zmienną% PATH%.
Pętle są oparte na if ... goto
, for
polecenie służy tylko do podzielenia ext
wartości przez ';' postać. Wartość parametru %PATHEXT%
jest poprzedzona pustym rozszerzeniem, które pozwala na wyszukiwanie pełnych nazw plików binarnych - zarówno which perl
i which perl.exe
działa.
.\binary.*
najpierw. System operacyjny zawsze najpierw szuka w bieżącym katalogu, zanim przeszuka katalogi w ścieżce poleceń.