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

Incrementing the last of a period-separated sequence of numbers in a batch file

我有一个执行部分软件构建过程的批处理文件。它从构建系统中提取当前标签名称,并将其放入生成的 C 源文件中。如果源不是从标签构建的,它将获取最新标签的名称(形式为 1.2.34 或 1.23)。然后它将 "build number" 递增 1 并附加文本 "Development"。或者至少应该如此。这是我想出的:

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。显然我错过了某处某事...

for %%a in ("!_lasttag!") do for /f "delims=." %%b in ("%%~xa.0") do (
    set /a "lastv=%%b+1"
    set "tag=%%~na.!lastv! (Development)"
)

就当点数是一个带扩展名的文件名吧。获取扩展名,增加它并连接其余元素。

类似于 MC ND 解决方案,但没有额外的 FOR /F 循环。我使用子字符串操作来消除 "extension"

中的点
for %%V in ("!_lasttag!") do (
  set "end=%%~xV"
  set /a "end=!end:~1!+1"
  set "tag=%%~nV.!end! (Development)"
)