2012-04-19 7 views
7

절대 경로를 배치 파일의 상대 경로로 변환 할 수 있습니까? (this의 반대쪽). 분명히 변환 할 절대 경로와 상대 경로를 지정하려는 절대 참조 경로라는 두 가지 입력이 필요합니다.절대 경로를 배치 파일의 상대 경로로 변환

예 : 여기

Path to convert: c:\documents\mynicefiles\afile.txt 
Reference path: c:\documents 
Result:   mynicefiles\afile.txt 

답변

5
@echo off 
setlocal EnableDelayedExpansion 
set Path_to_convert=c:\documents\mynicefiles\afile.txt 
set Reference_path=c:\documents 
set Result=!Path_to_convert:*%Reference_path%\=! 
echo Result: %Result% 
+0

감사합니다. 완벽하게 작동하는 것 같습니다. 전에 구문을 본 적이 없어요. 설명이나 링크를 제공해 주시겠습니까? –

+0

비록 내가 싫어할 지 모르지만 나는 그것이 작동하기 때문에 나는 또한 상향 투표를하고있다. 왜 그런지 모르겠다. –

+0

유형 :'SET /?'및 "환경 변수 대체가 다음과 같이 향상되었습니다 : % PATH : str1 = str2 %"아래의 설명을 찾아보십시오 : "지연된 환경 변수 확장을 사용하면 ..." – Aacini

0

당신의 희망은 문자열의 처음부터 %에서 cd ​​%를 제거 할 경우 작동하는 또 다른 방법이다. 느리지 만 상황에 따라 루프 수를 줄일 수 있습니다.

call :removeCommonAtStart outvar C:\Users\Public\Documents\ASUSAccess 

:removeCommonAtStart 
:: Description: loops through two strings and sets new variable representing unique data 
:: Required parameters: 
:: name - name of the variable to be returned 
:: test - string to have common data removed from start 
:: Optional parameters: 
:: remove - string if not defined then use %cd% as string. 
:: Required functions: 
:: removelet 
set name=%~1 
set test=%~2 
set remove=%~3 
if not defined remove set remove=%cd% 
set endmatch= 
FOR /L %%l IN (0,1,150) DO if not defined notequal call :removelet 
goto :eof 

:removelet 
:: Description: called by removeCommonAtStart to remove one letter from the start of two string variables 
:: Required preset variables: 
:: test 
:: remove 
:: name 
set test=%test:~1% 
set %name%=%test:~1% 
set remove=%remove:~1% 
if "%test:~0,1%" neq "%remove:~0,1%" set notequal=on&exit /b 
goto :eof 
관련 문제