[英]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.