제가 생각할 수있는 한 가지 방법은 다른 환경 변수를 사용하여 부분 경로를 저장하는 것입니다. 예를 들어,
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1;
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2;
그런 다음 다음과 같은 새 환경 변수를 만들 수 있습니다.
SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places
그 후 원래 경로가
%P1%\subdir1;
%P1%\subdir2;
편집 : 또 다른 옵션은 적절한 파일 을 가리키는 파일을 bin
보관 하는 디렉토리 를 만드는 것 입니다..bat
.exe
편집 2 : 다른 답변에 대한 Ben Voigt의 의견은 제안 된 다른 환경 변수를 사용하면 %PATH%
저장되기 전에 확장되기 때문에 길이가 줄어들지 않을 수 있다고 언급합니다 . 이것은 사실 일 수 있으며 테스트하지 않았습니다. 하지만 또 다른 옵션은 긴 디렉토리 이름에 8dot3 양식을 사용 C:\Program Files
하는 것 C:\PROGRA~1
입니다. 예를 들어 일반적으로 . dir /x
더 짧은 이름을 볼 수 있습니다 .
편집 3 : 이 간단한 테스트로 인해 Ben Voigt가 옳다고 믿게됩니다.
set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%
마지막에 . hellohello
대신 출력 이 표시 byehello
됩니다.
편집 4 : 당신이 사용하는 배치 파일을 결정하는 경우가에서 특정 경로를 제거하는 %PATH%
과정이 투명 것을 당신이 당신의 실행 등으로 배치 파일에서 인수를 전달하는 방법에 대해 염려 할 수 있습니다 (즉, 당신은 어떤 차이를 통지하지 않습니다 배치 파일 호출과 실행 파일 호출 사이). 배치 파일 작성 경험이 많지는 않지만 제대로 작동하는 것 같습니다.
@echo off
rem This batch file points to an executable of the same name
rem that is located in another directory. Specify the directory
rem here:
set actualdir=c:\this_is\an_example_path
rem You do not need to change anything that follows.
set actualfile=%0
set args=%1
:beginloop
if "%1" == "" goto endloop
shift
set args=%args% %1
goto beginloop
:endloop
%actualdir%\%actualfile% %args%
일반적으로 하드 드라이브 포맷과 같은 배치 파일로 모든 종류의 작업을 수행 할 수 있으므로 인터넷에서 배치 파일을 실행할 때는주의해야합니다. 위의 코드 (내가 작성한)를 신뢰하지 않는 경우 줄을 바꾸어 테스트 할 수 있습니다.
%actualdir%\%actualfile% %args%
와
echo %actualdir%\%actualfile% %args%
이상적으로는 실행하기 전에 모든 라인이 무엇을하는지 정확히 알아야합니다.