Одним з лайнерів cmd.exe which
буде:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Ви можете кодувати це як простий what.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: для цього потрібна повна назва двійкового файлу:, which perl.exe
not which perl
. Можна записати пакетний файл, який враховує% PATHEXT%, тому йому не потрібно повне ім'я двійкового файлу. Будь ласка, дайте мені знати, якщо вам це потрібно.
EDIT2: все одно я вирішив написати пакетний файл. Ось:
@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
По-перше, згідно з попередженнями Боба, він перевіряє, чи існує бінарний файл у поточному каталозі. Якщо двійковий файл не знайдено, виконується інший цикл, який здійснює пошук через змінну% PATH%.
Цикли засновані на if ... goto
, for
команда використовується лише для розділення ext
значення на ';' характер. Значення %PATHEXT%
має попередньо порожнє розширення, яке дозволяє шукати повна назва бінарних файлів - і те, which perl
і which perl.exe
працює.
.\binary.*
спершу перевірте . Операційна система завжди шукає спочатку в поточному каталозі, перш ніж виконувати пошук каталогів у командному шляху.