批量脚本替换字符串中的字符串变量

我怎样才能删除
// 从行中删除绝对路径的字符串 fullPath


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


我怎样才能删除 abs_p 的 rel_p?
我无法做出语法


set rel_p=%rel_p:abs_p=%
已邀请:

小明明

赞同来自:

快速和肮脏的解决方案,只要适用 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!


在上面的示例中,使用粗略但有效地获得绝对路径串的长度的方法。 相反,您可以使用更复杂,但非常快
http://www.dostips.com/DtCodeC ... trLen
.

诸葛浮云

赞同来自:

对于您的实施例,此脚本制造

foo\boo\bar


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%

要回复问题请先登录注册