我有一个文本文件,其中只包含一行,其中包含我的应用程序的版本号。一个例子是1.0.0.1。我想增加内部版本号。使用我的示例,我将在同一文本文件中获得输出1.0.0.2。
如何使用PowerShell执行此操作?
答案 0 :(得分: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
递增一个。
在关闭机会中,文件中有一些空格或其他隐藏线,我们确保只使用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
。
答案 1 :(得分: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"
答案 2 :(得分:0)
另一个字符串变体,它删除了对数组成员的冗余分配,并提醒您如何处理数组的最后一个元素。我认为这样会更清洁。
$file="C:\scripts\assemblyVersion.txt"
$versionparts = (get-content -Path $file).split('.')
([int]$versionparts[-1])++
$versionparts -join('.') | set-content $file