Как я могу "который" в cmd.exe

Как я могу "который" в cmd.exe

Есть ли способ быстро определить, где %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

Связанный контент