【问题标题】:Increment version in a text file文本文件中的增量版本
【发布时间】:2019-03-04 03:00:44
【问题描述】:

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

我如何使用 PowerShell 来做到这一点?

【问题讨论】:

  • 可以这样做,但文本文件本身没有版本号。您是指文件名还是文件名?
  • 对不起,我的意思是它的内容..
  • 那么文件的唯一内容就是那个文本吗?
  • 是的,内容只是 4 个数字除以点,就像我上面所说的,即:1.0.0.1

标签: powershell versioning


【解决方案1】:

这可能有点过头了,但它显示了 [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 加一。

万一文件中存在一些空白或其他隐藏行,我们会确保仅使用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

【讨论】:

  • 完美地完成了这个技巧,我理解除了 Select -First 1 之外的所有命令。这是否意味着采用第一个原始命令?
  • @mfuxi Select-Object -First $x 返回第一个 $x 项目并丢弃其余项目
【解决方案2】:
$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"

【讨论】:

  • @Matt 您的解决方案看起来也很棒,但实际上,New-Object 避免了解析您自己的版本号。如果 System.VersionNextRevision(), NextBuild(),... 返回新版本的方法会很好
  • 当我看到这个问题时,我认为[version] 会很有用,直到出现只读错误。
【解决方案3】:

另一个字符串变体删除了对数组成员的冗余分配,并包含有关如何寻址数组的最后一个元素的提示。我觉得它更干净一些。

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

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 2016-10-18
    • 2012-08-31
    • 2023-03-11
    • 2019-02-14
    • 2018-09-25
    • 2020-04-23
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多