首页 > 解决方案 > 根据文件名段移动文件

问题描述

我正在尝试构建一个脚本以将旧 PDF 从其源文件夹移动到存档文件夹中。

我已经根据它们的数字名称将大约 15,000 个 PDF 组织到一系列文件夹中。下一个挑战是同一文件 IE 有多个修订版:

27850_rev0.pdf
27850_rev1.pdf
27850_rev2.pdf

在源文件夹中保留最高版本号并将所有较低版本移动到存档的最佳方法是什么?

任何帮助表示赞赏。

谢谢,

在此处输入图像描述

标签: powershell

解决方案


您可以使用表达式 withGroup-Object来隔离以该根文件名开头的所有文件,即 27850*。如果您然后对这些文件进行排序,您知道最后一个是最高修订号:

Get-ChildItem 'C:\temp\06-11-21' -Filter *.txt |
Group-Object -Property { $_.Name.Split('_')[0] } |
ForEach-Object{
    $_.Group | Sort-Object Name | Select-Object -SkipLast 1 |
    Copy-Item -Destination 'C:\temp\06-11-21_backup'    
}

我在这个例子中使用了一些文本文件,但它应该是一样的。

注意:显然您必须更改文件夹和过滤器......

Group-Object返回 GroupInfo 对象,以便获取我引用的原始对象组$_.Groups

这确实取决于静态的命名格式。如果您在文件名的其他地方有下划线,我们可能会遇到问题。但是,我们总是可以调整表达式。


推荐阅读