我正在寻找一种将字符串 1.2.0 转换为 int 的方法,以便我可以增加最后一位数字。最终结果应该是 1.2.1
$values = '1.2.0'
$after = $values.split('.');
$result = [int]$after;
# TODO increment the last decimal value, result should be 1.2.3
$result
我正在寻找一种将字符串 1.2.0 转换为 int 的方法,以便我可以增加最后一位数字。最终结果应该是 1.2.1
$values = '1.2.0'
$after = $values.split('.');
$result = [int]$after;
# TODO increment the last decimal value, result should be 1.2.3
$result
令人惊讶的是,该System.Version
类型不支持增加版本号组件的方法(PowerShell Core-onlySystem.Management.Automation.SemanticVersion
类型也不支持)。
这是一个 PSv5+ 解决方案:
$versionString = '1.2.0'
$version = [version] $versionString
$versionStringIncremented = [string] [version]::new(
$version.Major,
$version.Minor,
$version.Build + 1
)
# $versionStringIncremented now contains '1.2.1'
如果您想将其包装在一个允许递增任何组件的函数中,同时将所有较低的组件设置为0
或,在 的情况下.Revision
,设置为未定义(报告为-1
):
function Increment-Version {
param(
[Parameter(Mandatory)]
[version] $Version
,
[ValidateSet('Major', 'Minor', 'Build', 'Revision')]
[string] $Component = 'Revision'
)
$useRevision = $Version.Revision -ne -1 -or $Component -eq 'Revision'
$Major, $Minor, $Build, $Revision =
$Version.Major, $Version.Minor, $Version.Build, $Version.Revision
switch ($Component) {
'Major' { $Minor = $Build = 0 }
'Minor' { $Build = 0 }
}
Set-Variable $Component (1 + (Get-Variable -ValueOnly $Component))
if ($useRevision) {
[version]::new(
$Major,
$Minor,
$Build,
$Revision
)
} else {
[version]::new(
$Major,
$Minor,
$Build
)
}
}
然后,您的命令将简化为:
# -> '1.2.1'
$versionStringIncremented = [string] (Increment-Version 1.2.0 -Component Build)
# -> '1.3.0'
$versionStringIncremented = [string] (Increment-Version 1.2.7 -Component Minor)
这个小片段是一种在我使用 tfs api 调用 json 字符串时弄清楚如何增加内部版本号的最后一位的方法。
我找到了一个解决方案,我试图自动化我的 TFS 构建版本号,以便在构建任务期间每次构建后递增。我将为我的构建版本号创建变量并遵循此方法。
我使用这些指南来创建我的脚本:
https://platform.deloitte.com.au/articles/how-to-automate-incrementing-project-build-numbers-in-vsts
http://devbraino.com/2017/09/25/auto-package-vsts-custom-build-task/
$first = '1'
$second = '2'
$third = '0'
$currentVersion = "$($first).$($second).$($third)"
$third = "$([System.Convert]::ToInt32($third) + 1)"
[string]$newVersionNumber = "$($first).$($second).$($third)"
$newVersionNumber