假設檔案夾中有以下快照檔案串列
app-SNAPSHOT-01.jar
app-SNAPSHOT-02.jar
app-SNAPSHOT-03.jar
app-SNAPSHOT-04.jar
...
app-SNAPSHOT-xy.jar
通過PowerShell腳本提取最新(最大次要版本)檔案名(即 app-SNAPSHOT-xy.jar)的最簡單方法是什么?
到目前為止,我已經嘗試過了
$maxVersion = ls -Filter app-SNAPSHOT-* | sort { [version]($_.Name.split("-")[-1]) } -Descending | select -Index 0
但它拋出一個錯誤錯誤: "Version string portion was too short or too long."
更新
感謝@Santiago Squarzon 的回答
實際檔案名比上面的例子有點復雜,它帶有時間戳
#20211128.031305 being timestamp
app-SNAPSHOT-0.0.2-20211128.031305-10.jar
uj5u.com熱心網友回復:
給你一個簡短的解釋為什么你會得到這個例外。有關Version Class更多詳細資訊,請參閱。
所有定義的組件必須是大于等于0的整數。版本號格式如下(可選組件用方括號([和])表示:
major.minor[.build[.revision]]
例子:
PS /> [version]'1.0.1'
Major Minor Build Revision
----- ----- ----- --------
1 0 1 -1
在這種情況下,您無法[version]轉換為數字,因為它們不遵循版本格式。如果您想在連字符和.jar擴展名之間轉換數字,則需要進行操作,除非您指定,否則我們無法遵循任何邏輯。
如果您只需要按數字排序并獲得更大的數字,您可以這樣做:
Get-ChildItem . -Filter *.jar |
Sort-Object {
[int][regex]::Match($_.Name, '(?<=-)\d (?=\.jar)').Value
} -Descending | Select-Object -First 1
例如,我創建了一些默認順序如下所示的檔案:
Name
----
app-SNAPSHOT-01.jar
app-SNAPSHOT-01000.jar
app-SNAPSHOT-04.jar
app-SNAPSHOT-19x9.jar
app-SNAPSHOT-630.jar
排序后(請注意,這app-SNAPSHOT-19x9.jar是最后一個,因為它與regex模式不匹配):
Name
----
app-SNAPSHOT-01000.jar
app-SNAPSHOT-630.jar
app-SNAPSHOT-04.jar
app-SNAPSHOT-01.jar
app-SNAPSHOT-19x9.jar
編輯
這是您對編輯時顯示的命名約定的檔案進行排序的方式,首先DateTime按版本,然后按版本(擴展名-和.jar擴展名之間的數字)
@'
app-SNAPSHOT-0.0.2-20211128.031305-13.jar
app-SNAPSHOT-0.0.2-20211129.011305-12.jar
app-SNAPSHOT-0.0.2-20211122.051305-10.jar
app-SNAPSHOT-0.0.2-20211128.081305-10.jar
app-SNAPSHOT-0.0.2-20211129.021305-08.jar
'@ -split '\r?\n' | Sort-Object {
[datetime]::ParseExact(
[regex]::Match($_, '(?<=-)\d{8}\.\d{6}(?=-)').Value,
'yyyyMMdd.HHmmss',
$null
)
},
{
[int][regex]::Match($_, '(?<=-)\d (?=\.jar)').Value
} -Descending
排序后的結果將是:
app-SNAPSHOT-0.0.2-20211129.021305-08.jar
app-SNAPSHOT-0.0.2-20211129.011305-12.jar
app-SNAPSHOT-0.0.2-20211128.081305-10.jar
app-SNAPSHOT-0.0.2-20211128.031305-13.jar
app-SNAPSHOT-0.0.2-20211122.051305-10.jar
在上面的示例中,“最新”檔案將為app-SNAPSHOT-0.0.2-20211129.021305-08.jar. 即使app-SNAPSHOT-0.0.2-20211129.011305-12.jar版本號更高,它的時間戳也比另一個更近(精確到 1 小時):
[datetime]::ParseExact('20211129.021305', 'yyyyMMdd.HHmmss', $null) -gt
[datetime]::ParseExact('20211129.011305', 'yyyyMMdd.HHmmss', $null) # => True
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368898.html
標籤:电源外壳
