cmd.exe에서“어떤 <binary>”할 수 있습니까?


10

이진 ( %PATH%변수가 가리키는)의 위치 를 신속하게 결정하는 방법이 있습니까?

그것은 which perl전통적인 유닉스 쉘 과 동등한 기능입니다 .

나는 이해 리소스 키트where명령을,하지만 난 사용할 수 있도록이 키트는, 내 (기업) - 컴퓨터에 설치되어 있지 않습니다 where.

답변:


14

cmd.exe one-liner 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

먼저 Bob의 sugestion에 따라 바이너리가 현재 디렉토리에 존재하는지 확인합니다. 바이너리가 발견되지 않으면 % PATH % 변수를 통한 검색을 수행하는 다른 루프가 실행됩니다.

루프는를 기반으로하며 if ... goto, for명령은 ext값을 ';' 캐릭터. 의 값 %PATHEXT%을 모두 - 완전라는 이름의 바이너리를 검색 할 수 있습니다 빈 확장, 앞에 추가 which perl하고 which perl.exe작동합니다.


1
확장 배치 파일을 작성하면 끝까지 확인하고 .\binary.*먼저 확인하십시오 . 운영 체제는 명령 경로에서 디렉토리를 검색하기 전에 항상 현재 디렉토리를 먼저 검색합니다.
Bob

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.