增加文本文件中的版本

问题描述 投票:10回答:3

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

如何使用PowerShell执行此操作?

powershell versioning
3个回答
16
投票

这可能是过度杀戮,但它显示了使用[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]的不幸部分是属性是只读的,因此您无法编辑数据。我们使用format运算符重建版本,同时将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重新加入。


3
投票
$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"

0
投票

还有一个字符串变体,用于删除对数组成员的冗余赋值,并包含有关如何寻址数组最后一个元素的提示。我觉得它有点清洁。

$file="C:\scripts\assemblyVersion.txt"
$versionparts = (get-content -Path $file).split('.')
([int]$versionparts[-1])++
$versionparts -join('.') | set-content $file
© www.soinside.com 2019 - 2024. All rights reserved.