我的一个文件夹中有几千个不同版本的文件。
ACZ002-0.p
ACZ002-1.p
ACZ002-2.p
ACZ051-0.p
ACZ051-1.p
...
修订版本始终是点之前的最后一位数字。我只需要保留最新版本的文件,但我不知道如何处理我的代码。
$path = "E:\Export\"
$filter = [regex] "[A-Z]{3}[0-9]{3}\-[0-9]{1,2}\.(p)"
$files = Get-ChildItem -Path $path -Recurse | Where-Object {($_.Name -match $filter)}
答案1
可能有更好的方法可以做到这一点,但这是我首先想到的实现方法;这种方法在正则表达式中使用命名捕获组,使 powershell 更容易按基本文件名和修订版本进行排序和分组。最后一个变量 $filesToKeep 将是一个 FileInfo 对象数组,您可以从删除命令中排除它。当然,我建议在实际删除任何内容之前进行大量测试。
$filter = [regex] "(?<baseName>[A-Za-z]{3}[0-9]{3})\-(?<revision>[0-9]+)\.p"
$results = ls c:\temp -Recurse | where {$_.Name -match $filter} | foreach-object {
new-object PSObject -Property @{
BaseName = $matches.BaseName
Revision = $matches.Revision
File = $_
}
}
$filesToKeep = $results | sort basename, revision -Descending | group basename | ForEach-Object { $_.group | select -first 1 -ExpandProperty File}