Powershell 增量值 0.0.1

Powershell Increment value by 0.0.1

我有一个变量,returns 值来自 json:

$version = (Get-Content 'package.json' | ConvertFrom-Json).version

此值始终采用 x.x.x 格式。它可以是 0.0.3 或 1.123.23 值。

我的问题是 - 如何增加唯一的补丁值?例如。转换后我需要有 0.0.4 或 1.123.24 输出值。

C:\> $v = "1.2.3"
C:\> $(($v -split "\.")[0..1] + "$([int](($v -split '\.') |Select-Object -Index 2) +1)") -join "."

转换为 [version] 对象:

# read existing version
$version = [version](Get-Content 'package.json' | ConvertFrom-Json).version

# create new version based on previous with Build+1
$bumpedVersion = [version]::new($version.Major, $version.Minor, $Version.Build + 1)

或者,手动拆分字符串:

$major,$minor,$build = $version.Split('.')

# increment build number
$build = 1 + $build

# stitch back together
$bumpedVersion = $major,$minor,$build -join '.'

补充 with a concise alternative based on the

# PowerShell [Core] only (v6.2+) - see bottom for Windows PowerShell solution.
PS> '0.0.3', '1.123.3' -replace '(?<=\.)[^.]+$', { 1 + $_.Value }
0.0.4
1.123.4
  • Regex (?<=\.)[^.]+$ 匹配版本号的最后一个组成部分(匹配中不包括前面的 .)。

  • Script block { 1 + $_.Value } 替换该组件,其值增加 1。

有关增加 任何 版本号组件的解决方案,包括正确处理 [semver] 版本号,请参阅 this answer


WindowsPowerShell中,不支持基于脚本块的-replace语法,解决方案比较麻烦,因为它需要直接使用 .NET System.Text.RegularExpressions.Regex 类型:

PS> '0.0.3', '1.123.3' | foreach { 
       [regex]::Replace($_, '(?<=\.)[^.]+$', { param($m) 1 + $m.Value })
    }
0.0.4
1.123.4

试试这个:

$build = [int]($version.split(".")[2])+1
$bumpedversion = $version.split(".")[0], $version.split(".")[1], $build -join "."