批处理脚本replacestring内的可变字符

我怎样才能删除//从fullPathstring中删除绝对pathstring

set abs_p=C:\abspath\ set rel_p=C:\abspath\foo\boo\bar 

我怎样才能从rel_p中删除abs_p? 我没有得到语法工作

 set rel_p=%rel_p:abs_p=% 

Solutions Collecting From Web of "批处理脚本replacestring内的可变字符"

为了您的示例输入,此脚本生成

FOO \嘘\酒吧

 set abs_p=C:\abspath\ set rel_p=C:\abspath\foo\boo\bar set newp= set rec_a= set rec_r= call :strip %rel_p%\ %abs_p% goto :END :strip set rec_a_part= set rec_a= set rec_r_part= set rec_r= for /F "tokens=1,* delims=\" %%t in ("%2") do ( set rec_a_part=%%t set rec_a=%%u ) for /F "tokens=1,* delims=\" %%t in ("%1") do ( set rec_r_part=%%t set rec_r=%%u ) if not !%newp%!==!! set newp=%newp%\ if not !%rec_a_part%!==!%rec_r_part%! set newp=%newp%%rec_r_part% if not !%rec_r%!==!! call :strip %rec_r% %rec_a% goto :EOF :END echo %newp% 

一个快速和肮脏的解决方案,只要abs_p不包含=!

 @echo off setlocal enableDelayedExpansion set "abs_p=C:\abspath\" set "rel_p=C:\abspath\foo\boo\bar" set "rel_p=!rel_p:*%abs_p%=!" echo relative path = !rel_p! 

一个快速的解决方案应该始终工作。

 @echo off setlocal enableDelayedExpansion set "abs_p=C:\abspath\" set "rel_p=C:\abspath\foo\boo\bar" >temp.txt echo !abs_p! for %%N in (temp.txt) do set /a len=%%~zN-2 set "rel_p=!rel_p:~%len%!" del temp.txt echo relative path = !rel_p! 

以上使用粗略而有效的方法来获得绝对路径的字符串长度。 有一个更复杂但尖叫的快速strLen功能 ,可以用来代替。