【问题标题】:converting pom.xml version to number format将 pom.xml 版本转换为数字格式
【发布时间】:2019-01-18 21:28:33
【问题描述】:

我需要使用 powershell 脚本递增读取 pom.xml 版本并将其递增 1。

我能够获取版本值,例如:1.0.123,但此处给出的类型是字符串,当我尝试将其转换为 Decimal 或 Double 时出现以下错误:

代码:

PS C:\Users\XXXX\Downloads> $finale
1.0.153

PS C:\Users\XXXX\Downloads> $finale.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                      
-------- -------- ----                                     --------                                                                                                      
True     True     String                                   System.Object 

错误:

PS C:\Users\XXXX\Downloads> $finale1 = [Double]::Parse($finale)

使用“1”个参数调用“Parse”的异常:“输入字符串的格式不正确。” 在行:1 字符:1 + $finale1 = [双]::Parse($finale) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : 格式异常

【问题讨论】:

  • 为什么要将它转换为 Double?只需将其解析为一个版本:[Version]::Parse("1.0.123")
  • 您可以将字符串拆分为三个不同的整数,并在重新创建字符串之前增加您需要的整数。
  • @guiwhats我想增加数字,这就是我搜索转换的原因

标签: powershell


【解决方案1】:

原因是 1.0.123 不是数学。它既不是整数,也不是双精度数。它只是一个包含数字和符号的字符串。这就是您收到错误的原因。

请参阅以下帮助文件: About_Arithmetic_Operators .NET Math Class

【讨论】:

    【解决方案2】:

    使用[version] 类型很好,但它是不可变的。此代码将其拆分为一个数组,增加第三个(内部版本)编号,并在 $newfinale 中生成一个字符串。

    请注意,这不会检查是否存在第三个(构建)值。如果 $finale 是 '1.2',它将产生异常。

    PS C:\> $finale = '2.3.4.5'
    PS C:\> $a = $finale.split('.')
    PS C:\> $a[2] = [int]$a[2] + 1
    PS C:\> $newfinale = $a -join '.'
    PS C:\> $newfinale
    2.3.5.5
    

    【讨论】:

    • 非常感谢,我已经使用了这个,我的脚本现在运行良好。
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2018-03-12
    相关资源
    最近更新 更多