根据文件名的分段移动文件



我正试图构建一个脚本,将旧的PDF从其源文件夹移到归档文件夹中。

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

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

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

感谢您的帮助。

谢谢,

在此处输入图像描述

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

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

我在这个例子中使用了一些文本文件,但它应该可以正常工作。

注意:很明显,您必须更改文件夹和筛选器。。。

Group-Object返回GroupInfo对象,因此要得到原始对象的组,我引用$_.Groups

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

最新更新