PATH에 상대적인 폴더가 있는 Windows 명령

PATH에 상대적인 폴더가 있는 Windows 명령

Windows 명령줄에서 c:\foo에 있고 c:\bar가 내 PATH에 있는 경우.
'\bin\myapp.exe'를 호출하고 내 경로를 검색하여 c:\bar\bin\myapp.exe를 호출할 수 있는 방법이 있습니까?
아마도 접두사/환경 변수 또는 표준 유틸리티일까요?

위의 내용은 Macos/Linux 시스템(?)에서 잘 작동할 것이라고 생각하며 명령에 폴더 정보가 없으면 Windows에서도 잘 작동합니다(예: c:\bar\bin이 경로에 있고 myappe.exe만 호출합니다).

업데이트-이는 (타사) 설치 디렉터리를 모르는 스크립트용이며 기본 디렉터리가 경로에 있다는 것만 알고 있습니다.(그리고 exe 이름은 동일한 이름을 가진 앱과 충돌할 가능성이 없을 정도로 고유합니다.) 아마도 찾기(grep)하는 스크립트를 작성할 수 있을 것입니다. Unix에서 허용하는 방식과 유사하게 명령에 하위 폴더 이름을 허용하는 쉬운 트릭(cmd.exe 옵션 등)이 있기를 바랐습니다.

답변1

읽다명령줄 인수(Parameters)또는 call /?:


If Command Extensions are enabled CALL changes as follows:
In addition, expansion of batch script argument references (%0, %1,
etc.) have been changed as follows:
        %~$PATH:1   -  searches the directories listed in the PATH
                       environment variable and expands %1 to the fully
                       qualified name of the first one found.  If the
                       environment variable name is not defined or the
                       file is not found by the search, then this
                       modifier expands to the empty string

FOR명령은 숫자가 아닌 문자로 식별되는 매개변수 변수를 생성합니다(예: %%G). 위에서 설명한 매개변수 확장도 여기에 적용될 수 있습니다.

위 내용을 귀하의 사례에 적용합니다( 또는 스크립트 %%g에서 사용하기 위해 한숨을 쉬는 비율이 두 배로 증가했습니다 )..bat.cmd

for %%g in ("bin\myapp.exe") do @set "_pathToMyApp=%%~$PATH:g"
rem         ↑↑  NO leading backslash
rem next line calls `myapp.exe` using its fully qualified name
"%_pathToMyApp%"

실제 예: ( %g열린 창의 명령 프롬프트에서 사용하는 경우 단일 퍼센트 한숨을 참고하세요 cmd). 내 PATH변수는 폴더 …;C:\Utils\;…에 대한 추가 참조가 없는 것으로 읽혀집니다(C:\Utils기본 디렉토리)은 myapp.exe제공된 모든 매개변수를 표시하는 간단한 애플리케이션입니다.

d:\bat> myapp.exe
'myapp.exe' is not recognized as an internal or external command,
operable program or batch file.

d:\bat> bin\myapp.exe
The system cannot find the path specified.

d:\bat> set _
Environment variable _ not defined

d:\bat> for %g in ("bin\myapp.exe") do @set "_pathToMyApp=%~$PATH:g"

d:\bat> set _
_pathToMyApp=C:\Utils\bin\myapp.exe

d:\bat> "%_pathToMyApp%" display all parameters
param 0 = C:\Utils\bin\myapp.exe
param 1 = display
param 2 = all
param 3 = parameters

d:\bat>

답변2

Windows에서는 자신만의 환경 변수를 설정한 다음 사용할 수 있습니다. 그래서 당신은 갈 수 있습니다 :

  • 제어판
  • 체계
  • 고급 시스템 설정
  • 고급 탭
  • 환경 변수

그런 다음 "새로 만들기"를 클릭하고 변수를 추가하세요. 그런 다음 명령에서 해당 변수를 사용할 수 있습니다. 따라서 경로를 설정하고 원하는 이름으로 원하는 대로 사용할 수 있습니다.

예:

따라서 귀하의 경우 다음 변수를 설정할 수 있습니다. appNameBinPath = "C:\bar" 그런 다음 다음 예에서 이를 사용할 수 있습니다.

C:\foo>%appNameBinPath%\bin\myapp.exe 

또는 스크립트 및/또는 명령줄을 통해 영구 변수를 설정하려면 다음 문서를 참조하세요.https://stackoverflow.com/questions/5898131/set-a-pertant-environment-variable-from-cmd-exe

관련 정보