Làm thế nào tôi có thể định hướng mà <binary> 'trong cmd.exe


10

Có cách nào để nhanh chóng xác định vị trí của một nhị phân (mà %PATH%biến chỉ đến).

Đó là một cái gì đó sẽ làm tương đương với which perltrong một vỏ unix truyền thống.

Tôi hiểu rằng Bộ tài nguyên có một wherelệnh, nhưng bộ này không được cài đặt trên máy tính (công ty) của tôi, vì vậy tôi không thể sử dụng where.

Câu trả lời:


14

Một cmd.exe một-liner cho whichsẽ là:

for %G in (<binary.exe>) do @echo.%~$PATH:G

Bạn có thể mã nó dưới dạng đơn giản which.bat:

@echo off
for %%G in (%1) do @echo.%%~$PATH:G

EDIT: nó yêu cầu tên đầy đủ của nhị phân : which perl.exe, không which perl. Có thể viết một tệp bó có thể xem xét% PATHEXT%, vì vậy nó không cần tên đầy đủ của nhị phân. Xin vui lòng cho tôi biết nếu bạn cần nó.

EDIT2: dù sao tôi đã quyết định viết tệp bó. Đây là:

@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

Đầu tiên, theo sự ngăn chặn của Bob, nó sẽ kiểm tra xem nhị phân có tồn tại trong thư mục hiện tại không. Nếu không tìm thấy nhị phân, một vòng lặp khác được thực hiện để tìm kiếm thông qua biến% PATH%.

Các vòng lặp dựa trên if ... goto, forlệnh chỉ được sử dụng để phân chia extgiá trị theo ';' tính cách. Giá trị của %PATHEXT%được thêm vào một phần mở rộng trống, cho phép tìm kiếm nhị phân có tên đầy đủ - cả hai which perlwhich perl.exehoạt động.


1
Chà, nếu cuối cùng bạn viết một tệp bó mở rộng, cũng có thể tìm mọi cách và kiểm tra .\binary.*trước. Hệ điều hành luôn tìm kiếm trong thư mục hiện tại trước, trước khi nó tìm kiếm các thư mục trong đường dẫn lệnh.
Bob

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.