【问题标题】:Limit PowerShell VersionInfo output to only 3 decimal places where 4 decimal places are given or Remove Decimal Place in VersionInfo将 PowerShell VersionInfo 输出限制为仅 3 位小数,其中给出 4 位小数或删除 VersionInfo 中的小数位
【发布时间】:2011-09-08 18:23:27
【问题描述】:

在发布前将近 2 天,我尽力自己寻找答案。如果这个问题已经在这个网站的某个地方得到回答,我提前道歉。

简而言之,我需要从当前正在使用的 .dll 中提取 VersionInfo:

[System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\PathHere.dll').FileVersion | New-Item –ItemType 文件 c:\test.txt

这对我有用,但如果有人有他们认为更清洁的方法,我会全神贯注……或者更准确地说……全神贯注。该脚本将采用完整版本值并按照我的意愿写入文本文件,但我的问题是我只想要前 3 个小数位,在这种情况下,我得到的完整版本信息总是小数点后 4 位。

所以,如果 VersionInfo 是 1.3.102310.0345,我希望那个 .txt 文件只包含 1.3.102310 剩余的数字不要四舍五入,这一点非常重要。

只要最终结果是前 3 位小数的完整值,我真的不在乎版本输出是否以某种方式限制为仅显示前 3 位小数,或者是否将完整的 versioninfo 记录到.txt 然后可靠地从文件中删除。

【问题讨论】:

    标签: powershell decimal powershell-2.0 versioninfo


    【解决方案1】:

    试试这个:

    $value = [System.Diagnostics.FileVersionInfo]::GetVersionInfo(...)
    $version = [version]$value.ProductVersion
    $output = $version.tostring(3) # show x.y.z
    $output | out-file c:\test.txt
    

    【讨论】:

    • 我认为你需要这个来工作:$value = [System.Diagnostics.FileVersionInfo]::GetVersionInfo(...).ProductVersion - 我无法将 FileVersionInfo 转换为 [Version]
    • 不!它需要:[System.Diagnostics.FileVersionInfo]::GetVersionInfo(...).ProductVersion !
    • 我试过这个,但无法让它工作——毫无疑问,这是用户错误,所以我会继续尝试,只是为了更好地理解。非常感谢您的快速响应和对 manojlds 和 Cristian 的支持。
    • 用 ProductVersion 替换第一个 ToString() 后为我工作。
    【解决方案2】:

    这是另一种方式:

    $a = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\my.dll').fileversion; $a.Substring(0, $a.LastIndexOf('.')) |  New-Item –ItemType file c:\test.txt
    

    【讨论】:

    • 再次感谢克里斯蒂安。这绝对有效,再次感谢您的彻底响应和支持!
    【解决方案3】:

    应该这样做:

    [string]::Join('.', (Get-Item C:\PathHere.dll).versionInfo.FileVersion.Split('.')[0..2]) |  New-Item –ItemType file c:\test.txt
    

    如果您想要两个问题,也可以使用正则表达式:

    (Get-Item C:\PathHere.dll).versionInfo.FileVersion -replace '^(\d+\.\d+\.\d+)\.\d+$', "`$1" | New-Item –ItemType file c:\test.txt
    

    【讨论】:

    • 这工作得很好,看起来比我使用拆分的方向更干净,选择前 3 个,然后重新加入(尽管该方法在我正在做的事情中有其他应用程序)。非常感谢您提供令人难以置信的答案 - 这两种方法肯定会对我自己和其他寻求类似解决方案的人有所帮助!
    【解决方案4】:

    这些答案非常好,而且都成功了。发布这个问题后,我放慢了速度,后退了一步,在与朋友交谈时,另一个可能的答案突然出现了。

    $VersionInfo = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\Builds\Agent1\QACodeLine\Sources\WebPublicBuild\Binaries\PowerWallet.Common.CommonTypes.dll').FileVersion $VersionInfo.split('.') |选择-前 3 |输出文件“C:\testies.txt”

    此方法首先使用 .split('.') 将输出分成 4 部分,然后通过 select -first 3 仅获取前 3 部分(仅选择前 3 个输出。然后可以重新连接输出,或者如果更有用,逐行保存到文件中,但我想我将使用此处提供的一种方法,因为最后,我最好将前 3 个八位字节以正确的版本信息格式写入文本文件。

    再次感谢您的快速回复 - 非常感谢您的帮助! PowerShell 令人难以置信,它的支持社区更是如此!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多