Как я могу «какой <двоичный>» в cmd.exe


10

Есть ли способ быстро определить, где находится двоичный файл (на который %PATH%указывает переменная).

Это то, что можно сделать which perlв традиционной оболочке Unix.

Я понимаю, что у комплекта ресурсов есть whereкоманда, но этот комплект не установлен на моем (корпоративном) компьютере, поэтому я не могу его использовать where.

Ответы:


14

Однострочник 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работает.


1
Что ж, если вы в конечном итоге напишите расширенный пакетный файл, то можете пройти весь путь и .\binary.*сначала проверить . Операционная система всегда сначала ищет в текущем каталоге, прежде чем искать в каталогах по пути команды.
Боб

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.