Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 681 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Convert absolute path to relative path in batch file

#1
Is it possible to convert an absolute path to a relative path in a batch file? (the opposite of [this][1]). Obviously you would need two inputs: the absolute path to convert, and an absolute reference path that you want it to be relativised to.

eg:

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


[1]:

[To see links please register here]

Reply

#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%

Reply

#3
Here is another method that works if your want to remove the %cd% from the start of a string. It is slow but you could lower the number of loops if you situation allowed it.

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

Reply

#4
Below is a 'dostips' solution.<br>
Quite obscure at the level of operations used, but very efficient !

*Example provided in the header should help to understand usage of this macro.

::=//////////////////////////////////////////////////////////////////////////
::= Makes a file name relative to a base path.
::= *param-1: file [in,out] - variable with file name to be converted, or file name itself for result in stdout
::= *param-2: base [in,opt*] - base path | *leave blank for current directory
::= *return: The resolved relative path is stored into *param-1
::=
::= SAMPLE*HOW-TO-USE:
::= a) Current path =D:\titi\toto\
::= b) DATAPATH_absolute =D:\titi\tata\tutu\log.txt
::= c) --relativize the data-path--
::=
::= c1) INIT the data:
::= $> set DATAPATH_relative=%DATAPATH_absolute%
::=
::= c2) CALL the sub-function:
::= $> call :MakeRelative DATAPATH_relative
::=
::= c3) (( After the call, result is set in %DATAPATH_relative% ))
::=
::= d) echo DATAPATH_relative =%DATAPATH_relative%
::= /---> "..\tata\tutu\log.txt"
::=
::= $source

[To see links please register here]

::= **web:

[To see links please register here]

::= **web:

[To see links please register here]

::=--------------------------------------------------------------------------

:MakeRelative
SETLOCAL ENABLEDELAYEDEXPANSION

set src=%~1
if defined %1 set src=!%~1!
set bas=%~2
if not defined bas set bas=%cd%

for /f "tokens=*" %%a in ("%src%") do set src=%%~fa
for /f "tokens=*" %%a in ("%bas%") do set bas=%%~fa
set mat=&rem variable to store matching part of the name
set upp=&rem variable to reference a parent

for /f "tokens=*" %%a in ('echo.%bas:\=^&echo.%') do (
set sub=!sub!%%a\
call set tmp=%%src:!sub!=%%
if "!tmp!" NEQ "!src!" (set mat=!sub!) ELSE (set upp=!upp!..\)
)

set src=%upp%!src:%mat%=!
( ENDLOCAL & REM RETURN VALUES
IF defined %1 (SET %~1=%src%) ELSE ECHO.%src%
)
EXIT /b

[DosTips.com, :MakeRelative][1]


[1]:

[To see links please register here]

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through