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


3

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

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

업데이트 - 이것은 (타사) 설치 디렉토리를 모르는 스크립트를위한 것이며, 기본 디렉토리가 경로에 있다는 것만 알고 있습니다 (exe 이름은 고유 한 응용 프로그램과 충돌 할 가능성이 없습니다) 같은 이름). 아마도 찾을 수있는 스크립트를 작성할 수 있습니다. 유닉스가 허용하는 방식과 비슷하게 명령에 하위 폴더 이름을 허용하는 쉬운 트릭 (cmd.exe 옵션 등)이 있기를 바랐습니다.


타사 설치시 레지스트리에 아무것도 쓰지 않습니까?
DavidPostill

불행히도
비트 코더

답변:


1

읽기 명령 줄 인수 (매개 변수) 또는 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. 위에서 설명한 Parameter Expansions도 적용 할 수 있습니다.

위의 경우에 적용 ( 또는 스크립트 %%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폴더 ( base directory ) 를 더 이상 참조하지 않고 읽은 다음 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>

이것은 잘 작동했습니다. 내가 바라는 것은 100 %가 아니라 내 문제를 해결할 수 있습니다. (안타깝게도 나는 StackOverflow에 대부분의 글을 게시하므로 수퍼 유저에 대한 나의 명성은 당신을 올바르게
표명

2

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

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

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

예:

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

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

또는 스크립트 및 / 또는 명령 줄로 영구 변수를 설정하려면 다음 기사를 참조하십시오. https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe


내 문제는 내 스크립트가 실제로 기본 디렉토리를 알지 못한다는 것입니다 (다른 장소에 설치 될 수 있음). 내 원래의 질문은 그래서 비록 내가 업데이 트를 만든 것을 명확히하지 않았다
bitcoder

스크립트가 기본 디렉토리를 알지 못하고 환경 변수의 모든 인스턴스에 대해 수동으로 설정할 수 있는지 모르는 경우에는 그것을 찾을 디렉토리. 최대 재귀 횟수를 지정하지 않으면 혼란 스러울 수 있습니다.
IronWilliamCash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.