增加批处理文件中以句点分隔的数字序列的最后一个

时间:2015-02-12 14:23:51

标签: batch-file versioning increment

我有一个批处理文件,它执行软件构建过程的一部分。它将当前标记名称从构建系统中提取出来,并将其放入生成的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>

2 个答案:

答案 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)"
)