我有一個檔案夾,里面有一個子檔案夾/檔案串列
- 2022
- 20221101
- 20221103
- 20221107
- 20221108
- 測驗123
- 結果
- 測驗.txt
使用 Powershell
- 如何獲取日期檔案夾串列。
- 如何獲取第二個最新檔案夾(20221107)。
到目前為止,這是我能夠做到的:
Get-ChildItem "C:\code\Test" -Filter "2022*" | Sort-Object Name -Descending
uj5u.com熱心網友回復:
您可以使用fromTryParseExact方法DateTime來決議檔案夾名稱并避免任何型別的錯誤,這可以結合Sort-Object并Select-Object獲得第二個最新的。我已添加-Directory到僅輸出檔案夾。還更改了過濾器-Filter "2022????"以確保您匹配2022以 4 個字符開頭和后跟的檔案夾。
$ref = [ref] [datetime]::new(0)
Get-ChildItem "C:\code\Test" -Filter "2022????" -Directory | Sort-Object {
$result = [datetime]::TryParseExact(
$_.Name,
'yyyyMMdd',
[cultureinfo]::InvariantCulture,
[Globalization.DateTimeStyles]::AssumeLocal,
$ref
)
if($result) { $ref.Value }
} -Descending | Select-Object -Index 1
如果您想確保使用日期格式匹配檔案夾(因為-Filter可能過于寬松),您可以Where-Object通過正則運算式進行額外過濾:
$ref = [ref] [datetime]::new(0)
Get-ChildItem "C:\code\Test" -Filter "2022????" -Directory |
Where-Object Name -Match '^2022\d{4}$' | Sort-Object {
# rest of the code here
} -Descending | Select-Object -Index 1
uj5u.com熱心網友回復:
為圣地亞哥的有用答案提供替代方案:
由于您的檔案夾名稱所代表的時間戳在詞法上的排序方式與它們的時間排序相同,因此您可能不需要將它們轉換為[datetime]實體,并且可以按原樣對它們進行排序。
Get-Item C:\code\Test\* -Include 2022???? |
Sort-Object Name -Descending |
Select-Object -Index 1
請注意使用-Include代替-Filter(這反過來又需要以結束-Path引數\*并使用Get-Item代替Get-ChildItem),因為該-Filter引數具有傳統的怪癖,會阻止與多個?通配符的字符精確匹配 - 請參閱此答案以獲取背景資訊。
- 不幸的是,正如這個解決方案和鏈接的答案所示,從 PowerShell 7.2.x 開始,使
-Include(and-Exclude) 按預期作業是很棘手的,并且需要記住非直觀的規則。
從好的方面來說-Include,(與 PowerShell 不同-Filter)使用PowerShell的通配符運算式,還可以讓您創建更具體的模式,例如-Include 2020[0-1][0-9][0-3][0-9](但仍然不夠嚴格,無法排除無效的數字組合)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530675.html
上一篇:Javascript陣列差異
下一篇:隨機耗盡元素串列而不先隨機排序
