如何在Powershell中比较版本号?

14

我正在尝试对一个数组中的版本号进行排序,从高到低降序排列。

我要排序的版本号示例是W88.1.1

我所尝试的只有:

$a = "W99.2.9", "W99.2.8", "W99.2.3", "W99.2.7" | Sort-Object -Descending

2
你能分享一下你目前尝试过的代码吗? - Fourat
老实说,我在 PS 上还比较新,编程时间也不长。我尝试过的只有:$a = "W99.2.9", "W99.2.8", "W99.2.3", "W99.2.7" | Sort-Object -Descending - Supadugu
你能告诉我们,版本号前面的 W 是否实际上是对版本的引用,例如 W1.0.0 版本是否比 V9.9.9 新? - Fourat
不,不是。如果需要的话,我可以分割这个字符串。抱歉,一开始应该澄清这一点。 - Supadugu
你好,欢迎来到stackoverflow。问题大部分已经清晰(我只是想知道你所说的“版本”是什么意思),但无论如何,请参考[mcve]并随时编辑帖子。 我简要地浏览了一下,你应该能够使用Sort-Object函数。但是没有任何示例或源数据,没有背景,适当的解决方案是无法实现的。 - xxxvodnikxxx
2个回答

44

[System.Version]对象类型转换即可:

PS  >  [System.Version]"2.7.0.19530" -gt [System.Version]"3.0.0.4080"
False
PS  >  [System.Version]"2.7.0.19530" -lt  [System.Version]"3.0.0.4080"
True

2
谢谢,但似乎不能与变量一起使用。 - Supadugu
它也可以与变量一起使用。 - Ranadip Dutta
1
@RanadipDutta 他们的变量前面加了一个W,所以它无法正常工作。 - Maximilian Burszley

-1
如果您目前将版本号存储在一个数组中,您可以按照以下方式对它们进行排序。
$versionArray = ('W88.1.1','W88.1.0','W72.1.1','W89.2.1','Z89.2.1','A89.2.1')
$sortedArray = $versionArray | Sort
Write-Output $sortedArray

这个例子的输出将是:

A89.2.1
W72.1.1
W88.1.0
W88.1.1
W89.2.1
Z89.2.1

在排序后添加“-Descending”以反转排序。
希望这可以帮到你!

4
尽管这种方法适用于所提供的字符串数组,但一旦有双位数版本,按此方式排序就会变得奇怪。例如:@("A89.2.1","W72.1.1","W88.1.0","W88.1.1","W89.2.1","Z89.2.1", "W88.10.1", "W88.2.1") | sort 版本号为10的项被排序在1和2之间。 - Ro Yo Mi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接