답변:
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
작동합니다.
Paul Sadowski의 유틸리티 모음을 사용해보십시오 which
. http://www.paulsadowski.com/wsh/cmdprogs.htm 에서 참조하십시오 .
.\binary.*
먼저 확인하십시오 . 운영 체제는 명령 경로에서 디렉토리를 검색하기 전에 항상 현재 디렉토리를 먼저 검색합니다.