我有一个批处理文件,它执行软件构建过程的一部分。它将当前标记名称从构建系统中提取出来,并将其放入生成的C源文件中。如果源不是从标记构建的,则它获取最新标记的名称(形式为1.2.34或1.23)。然后它将“内部版本号”增加1并附加文本“开发”。或者至少它应该。以下是我的想法:
REM Increment the release tag. This will only work for Vx.y.z type release tags.
for /f "delims=. tokens=1-3" %%A in ("!_lasttag!") do (
set /a lastv = %%C + 1
set "tag=%%A.%%B.!lastv! (Development)"
)
输入位于_lasttag
,输出位于tag
。
这适用于“x.y.zz
”形式的代码,但如果有人对“1.23
”形式的代码进行提交,则会失败。
有更好的方法吗?
理想情况下,我想要一些适用于以下任何版本编号案例的内容:
1.2
1.2.34
1.2.34.56
我的下一个想法(就如何做到这一点)是用FOR
迭代字符串来计算令牌,然后再次这样做,直到令牌计数到达最后一个令牌。我最终得到了这个:
set _nvertags=0
for /f "delims=." %%A in ('echo !_lasttag!') do (
echo %%A
set /a _nvertags+=1
)
但是不是循环三次(输入“1.2.34
”),而是只运行一次,将nvertags
设置为1.显然我在某处遗漏了某些东西... < / p>
答案 0 :(得分:2)
for %%a in ("!_lasttag!") do for /f "delims=." %%b in ("%%~xa.0") do (
set /a "lastv=%%b+1"
set "tag=%%~na.!lastv! (Development)"
)
只要认为带点线的数字是带扩展名的文件名。获取扩展,增加它并连接其余元素。
答案 1 :(得分:0)
与MC ND解决方案类似,但没有额外的FOR / F循环。我使用子字符串操作来消除“扩展”
中的点for %%V in ("!_lasttag!") do (
set "end=%%~xV"
set /a "end=!end:~1!+1"
set "tag=%%~nV.!end! (Development)"
)