繁体   English   中英

按文件名末尾的数字对文件进行排序

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM