2

我是電源外殼的新手。我正在嘗試對名稱中間有版本號的文件列表進行排序。根據文件名中間的版本號對文件進行排序

以下是文件列表:

sample-file-1.1.0-patch.zip 
sample-file-1.1.1-patch.zip 
sample-file-1.1.2-patch.zip 
sample-file-1.1.2.1-fix-patch.zip 
sample-file-1.1.3-patch.zip 
sample-file-1.1.3.1-fix-patch.zip 
.. 
sample-file-1.1.15-patch.zip 
sample-file-1.1.15.1-fix-patch.zip 
sample-file-1.1.15.2-fix-patch.zip 
.. 
sample-file-2.0.0-patch.zip 
sample-file-2.0.1-patch.zip 
.. 

我想請你幫我的排序邏輯。

感謝

回答

7

與樣品輸入最簡單的方法如下,即假設以下-第一位數開始的版本號,它隨後-之前的最後一位結束:

Get-ChildItem *.zip | Sort-Object { [version]($_.Name -replace '^[^\d]+-(.*\d)-.*', '$1') } 
  • $_.Name -replace '^[^\d]+-(.*\d)-.*', '$1'從每個文件名中提取版本號作爲字符串。

  • [version]施放該字符串到版本數對象(System.Version[1] ,基於該版本數分量,其可排序。

  • 傳遞整個表達式作爲腳本塊{ ... }Sort-Object意味着排序基於由腳本塊返回的[version]情況下,評價爲每個輸入文件名。


[1] PSv5.1出臺了相關類型,[System.Management.Automation.SemanticVersion],基於semantic versioning,這不會然而在這裏工作,因爲它只支持版本數分量。

+0

@AniSaw:很高興聽到它;我的榮幸。 – mklement0

相關問題