如何使用Windows批处理从完整路径中删除基本路径

时间:2016-02-10 15:06:13

标签: windows batch-file str-replace

我有完整的路径(使用" %%〜fl"或%% ~l)

E:\Documents\Windows-Bash\CheckModels\SB3\models\TEST3\Cerus\Modbridge\Core\g-221.mdl

我的基本路径(根据%~dp0)是:

E:\Documents\Windows-Bash\CheckModels\SB3\

我如何提取:

models/TEST3/Cerus/Modbridge/Core/g-221.mdl

在文本文件中搜索它。

我的批处理脚本如下:

echo off

set DataBase=E:\Documents\Windows-Bash\CheckModels\SB3\DB\trackassembly_init.lua
set AddModel=models_present.txt
set MisModel=models_missing.txt
set BasePath=%~dp0
set Model

dir /a-d /b /s *.mdl > %AddModel%

for /F "tokens=*" %%l in ('type "%AddModel%"') do (
  set Model=%%~l 
  :: ?[1] Process the %Model% so it becomes "models/TEST3/Cerus/Modbridge/Core/g-221.mdl"
  :: ?[2] IF (not found %Model% in the contents of %DataBase% ) THEN
  :: ?[2]    echo Model > MisModel ( Append missing file )
  :: ?[2] END
)

del %AddModel%

echo End
timeout 25

如何用真实的东西替换?[1]和?[2]中的伪代码? 我可以使用C / C ++轻松转换字符串,但我不需要其他文件。有没有办法将整个事物转换为C / C ++?

1 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL
SET "basepath=u:\sourcedir\t w o"
PUSHD "%basepath%"
for /F "tokens=*" %%l in ('dir /a-d /b /s *.mdl ') do (
 set "Model=%%~l"
 call set "relpath=%%model:*%basepath%\=%%"
 call set "relpath=%%relpath:\=/%%"
 CALL echo %%relpath%% FOR %%l
)
popd
GOTO :EOF

注意定位引号以确保分配的值不包括源代码中的杂散尾随空格(如果存在则很难找到)

basepath是目录扫描的相对根。改为适合自己 - 我使用了适合我系统的目录。

call执行set命令并替换单个%变量。

设置“var1 =%var2:string1 * = string2%”

var1设置为var2的值,其中包含string1的字符替换为string2