【问题标题】:Powershell Increment value by 0.0.1Powershell 增量值 0.0.1
【发布时间】:2020-06-22 15:43:16
【问题描述】:

我有一个变量,它从 json 返回值:

$version = (Get-Content 'package.json' | ConvertFrom-Json).version

此值始终采用 x.x.x 格式。它可以是 0.0.3 或 1.123.23 值。

我的问题是——如何增加唯一的补丁值?例如。转换后我需要有 0.0.4 或 1.123.24 的输出值。

【问题讨论】:

    标签: json powershell version


    【解决方案1】:

    转换为[version] 对象:

    # read existing version
    $version = [version](Get-Content 'package.json' | ConvertFrom-Json).version
    
    # create new version based on previous with Build+1
    $bumpedVersion = [version]::new($version.Major, $version.Minor, $Version.Build + 1)
    

    或者,手动拆分字符串:

    $major,$minor,$build = $version.Split('.')
    
    # increment build number
    $build = 1 + $build
    
    # stitch back together
    $bumpedVersion = $major,$minor,$build -join '.'
    

    【讨论】:

    • 嗯,你的方法很棒,但对于第一种情况,我需要一个字符串 - 我怎么能做到这一点? Out-String 没有帮助prntscr.com/recmwd
    • @VasiliyVegas "$bumpedVersion"$bumpedVersion -as [string]$bumpedVersion.ToString() 都可以:)
    【解决方案2】:

    用基于-replace operator 的简洁替代方案来补充Mathias' helpful answer

    # PowerShell [Core] only (v6.2+) - see bottom for Windows PowerShell solution.
    PS> '0.0.3', '1.123.3' -replace '(?<=\.)[^.]+$', { 1 + $_.Value }
    0.0.4
    1.123.4
    
    • Regex (?&lt;=\.)[^.]+$ 匹配版本号的最后一个组件(匹配中不包括前面的.)。

    • Script block { 1 + $_.Value } 用增加 1 的值替换该组件。

    有关增加任何版本号组件的解决方案,包括正确处理[semver] 版本号,请参阅this answer


    Windows PowerShell 中,不支持基于脚本块的 -replace 语法,解决方案更加麻烦,因为它需要直接使用 .NET System.Text.RegularExpressions.Regex 类型:

    PS> '0.0.3', '1.123.3' | foreach { 
           [regex]::Replace($_, '(?<=\.)[^.]+$', { param($m) 1 + $m.Value })
        }
    0.0.4
    1.123.4
    

    【讨论】:

      【解决方案3】:
      C:\> $v = "1.2.3"
      C:\> $(($v -split "\.")[0..1] + "$([int](($v -split '\.') |Select-Object -Index 2) +1)") -join "."
      

      【讨论】:

        【解决方案4】:

        试试这个:

        $build = [int]($version.split(".")[2])+1
        $bumpedversion = $version.split(".")[0], $version.split(".")[1], $build -join "."
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-12
          • 2017-12-03
          • 1970-01-01
          • 2021-11-14
          • 2017-09-16
          • 1970-01-01
          • 2021-05-10
          • 1970-01-01
          相关资源
          最近更新 更多