batch script替换string中的变量字符串

use*_*986 2 windows batch-file

如何删除//从fullPath字符串中删除绝对路径字符串

set abs_p=C:\abspath\
set rel_p=C:\abspath\foo\boo\bar
Run Code Online (Sandbox Code Playgroud)

如何从rel_p中删除abs_p?我没有得到语法工作

set rel_p=%rel_p:abs_p=%
Run Code Online (Sandbox Code Playgroud)

dbe*_*ham 5

一个快速而肮脏的解决方案,只要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!
Run Code Online (Sandbox Code Playgroud)

一个应该始终有效的快速解决方案.

@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!
Run Code Online (Sandbox Code Playgroud)

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