[英]Powershell, Sort a list of files by version number at the end of the filename?
[英]Sort files by number in the end of a file name
我需要幫助完成一項棘手的任務。
我有一個具有相同結尾的 *.xml 文件列表。 下面的名稱僅顯示命名約定規則。
EEEEEEEEEE-JJJ-ZZZZZ_DDDDD-XML--0000001629358212.xml
EEEEEEEEEE-JJJ-OOOOOO-XML--0000001533506936.xml
EEEEEEEEEE-JJJ-AAAAAA-XML--0000001572627196.xml
文件名長度可能不同,但對我來說最后按這個數字排序很重要。 使用 SQL 語法會更容易,但我需要一個 PS 解決方案)。
LastWriteTime Sort-Object 比其他簡單方法更有效 - 但是當涉及到幾個具有相同 hh:mm PS 的文件時,順序會混合。
在這些文件應該發生的步驟鏈的開頭,我從每個文件名的開頭刪除了時間戳。 我能夠做到這一點:
dir *EEEEEEEEEE*.xml | Rename-Item -NewName {$_.name.substring($_.BaseName.IndexOf("EEEEEEEEE"))}
但我無法為排序編寫類似的東西。
也許有人可以建議如何解決它? 也許您對 PS Substring 有更多的經驗。
提前致謝。
閱讀並遵循Sort-Object ,向下滾動到-Property
參數:
…
Property 參數的值可以是計算出的屬性。 要創建計算屬性,請使用哈希表。哈希表的有效鍵如下:
expression - <string> or <script block> ascending or descending - <boolean>
有關更多信息,請參閱about_Calculated_Properties 。
也請閱讀示例部分。 采用
Get-ChildItem -File -Filter "*EEEEEEEEEE*-*.xml" |
Sort-Object -Property @{Expression = { ($_.BaseName -split '-')[-1] }}
謝謝你們的幫助。
我在下面使用了這一行,它在我的情況下有效。 GCI EEEEEEEEEE*.xml | Sort {$_.Name.substring($_.Name.Length - 20,14)}
GCI EEEEEEEEEE*.xml | Sort {$_.Name.substring($_.Name.Length - 20,14)}
它只讀取文件名末尾的數字,並按照我需要的方式對文件進行排序。
最好的祝福
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.