3

在发布前将近 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然后可靠地从文件中删除。

4

4 回答 4

3

尝试这个:

$value = [System.Diagnostics.FileVersionInfo]::GetVersionInfo(...)
$version = [version]$value.ProductVersion
$output = $version.tostring(3) # show x.y.z
$output | out-file c:\test.txt
于 2011-09-08T21:12:25.463 回答
0

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

$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 令人难以置信,它的支持社区更是如此!

于 2011-09-09T15:12:07.600 回答
0

这应该这样做:

[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
于 2011-09-08T18:59:46.243 回答
0

这是另一种方式:

$a = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\my.dll').fileversion; $a.Substring(0, $a.LastIndexOf('.')) |  New-Item –ItemType file c:\test.txt
于 2011-09-08T19:20:10.077 回答