どうすれば削除できますか//fullPath文字列から絶対パス文字列を削除します
set abs_p=C:\abspath\
set rel_p=C:\abspath\foo\boo\bar
rel_pからabs_pを削除するにはどうすればよいですか?構文が機能していません
set rel_p=%rel_p:abs_p=%
どうすれば削除できますか//fullPath文字列から絶対パス文字列を削除します
set abs_p=C:\abspath\
set rel_p=C:\abspath\foo\boo\bar
rel_pからabs_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!
上記は、絶対パスの文字列の長さを取得するために、大雑把ですが効果的な方法を使用しています。代わりに使用できる、より複雑ですが絶叫する高速strLen関数があります。
サンプル入力の場合、このスクリプトは生成します
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%