내가 어떻게 할 수 있니?"cmd.exe에서

내가 어떻게 할 수 있니?"cmd.exe에서

%PATH%변수가 가리키는 바이너리가 어디에 있는지 빠르게 확인할 수 있는 방법이 있습니까 ?

이는 which perl전통적인 유닉스 쉘에서와 동일한 작업을 수행합니다.

나는 이해리소스 키트명령이 있는데 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

편집: 바이너리의 전체 이름이 필요합니다: 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의 제안에 따라 현재 디렉터리에 바이너리가 있는지 확인합니다. 바이너리가 발견되지 않으면 %PATH% 변수를 통해 검색을 수행하는 또 다른 루프가 실행됩니다.

if ... goto루프는 를 기반으로 하며 명령은 ';'으로 값을 for분할하는 데만 사용됩니다 . ext성격. 값 앞에는 %PATHEXT%빈 확장자가 추가되어 전체 이름이 지정된 바이너리를 검색할 수 있습니다. 모두 which perlwhich perl.exe작동합니다.

답변2

whichPaul Sadowski의 유틸리티 컬렉션을 사용해 볼 수 있습니다 . 그는 . 다음에서 확인하세요.http://www.paulsadowski.com/wsh/cmdprogs.htm

관련 정보