Есть ли способ быстро определить, где %PATH%
находится двоичный файл (на который указывает переменная)?
Это то, что эквивалентно which perl
традиционной оболочке Unix.
Я это понимаюКомплект ресурсовесть where
команда, но этот комплект не установлен на моем (корпоративном) компьютере, поэтому я не могу ее использовать where
.
решение1
Однострочный cmd.exe which
будет выглядеть так:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Вы можете закодировать это как простой which.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: требуется полное имя двоичного файла: 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
.
решение2
Вы можете попробовать коллекцию утилит Пола Садовски - он включает which
. Посмотреть ее можно по адресу:http://www.paulsadowski.com/wsh/cmdprogs.htm