我有完整的路径(使用" %%〜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 ++?
答案 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