Преобразование абсолютного пути в относительный путь в пакетном файле
Можно ли преобразовать абсолютный путь в относительный путь в пакетном файле? (противоположность этой ). Очевидно, что вам понадобятся два входных параметра: абсолютный путь для преобразования и абсолютный ссылочный путь, к которому вы хотите его относить.
Например:
Path to convert: c:documentsmynicefilesafile.txt
Reference path: c:documents
Result: mynicefilesafile.txt
2 ответа:
@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%
Вот еще один метод, который работает, если вы хотите удалить %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