文本文件中的增量版本

Increment version in a text file

我有一个文本文件,其中只有一行包含我的应用程序的版本号。一个例子是 1.0.0.1。我想增加内部版本号。使用我的示例,我将在同一文本文件中获得输出 1.0.0.2。

我如何使用 PowerShell 完成此操作?

这可能有点过头了,但它显示了类型 [version] 的使用,这将节省进行字符串操作的需要。

$file = "C:\temp\File.txt"
$fileVersion = [version](Get-Content $file | Select -First 1)
$newVersion = "{0}.{1}.{2}.{3}" -f $fileVersion.Major, $fileVersion.Minor, $fileVersion.Build, ($fileVersion.Revision + 1)
$newVersion | Set-Content $file

此后的文件内容将包含 1.0.0.2。使用 [version] 的不幸之处在于属性是只读的,因此您不能就地编辑数字。我们使用格式运算符重建版本,同时将 Revision 递增 1。

如果文件中有一些空白或其他隐藏行,我们确保只获取第一行 Select -First 1

几种基于字符串操作的解决方案之一是将内容拆分为一个数组,然后在进行更改后重建它。

$file = "C:\temp\File.txt"
$fileVersion = (Get-Content $file | Select -First 1).Split(".")
$fileVersion[3] = [int]$fileVersion[3] + 1
$fileVersion -join "." | Set-Content $file

按句点拆分线。然后最后一个元素(第三个)包含您要增加的数字。它是一个字符串,所以我们需要将其转换为 [int] ,这样我们就得到了算术运算而不是字符串连接。然后我们重新加入 -join.

$versionFile = Get-Content -Path "c:\temp\testing.txt"
$version = [version]($versionFile)

$newVersion = New-Object -TypeName System.Version -ArgumentList $version.Major, $version.Minor, $version.Build, ($version.Revision + 1)
$newVersion | Set-Content -Path "c:\temp\testing.txt"

还有一个字符串变体,它删除了对数组成员的冗余赋值,并包括关于如何寻址数组最后一个元素的提醒。我觉得比较干净

$file="C:\scripts\assemblyVersion.txt"
$versionparts = (get-content -Path $file).split('.')
([int]$versionparts[-1])++
$versionparts -join('.') | set-content $file