Однострочник cmd.exe для which
будет:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Вы можете кодировать это как простой which.bat:
@echo off for %%G in (%1) do @echo.%%~$PATH:G
РЕДАКТИРОВАТЬ: требуется полное имя двоичного:, which perl.exe
не 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
работает.