我有一个文件夹中有几千个不同版本的文件。
ACZ002-0.p ACZ002-1.p ACZ002-2.p ACZ051-0.p ACZ051-1.p ...
修改始终是点之前的最后一个数字。 我只需要保留最新版本的文件,但是我不知道如何继续使用我的代码。
$path = "E:\Export\" $filter = [regex] "[AZ]{3}[0-9]{3}\-[0-9]{1,2}\.(p)" $files = Get-ChildItem -Path $path -Recurse | Where-Object {($_.Name -match $filter)}
可能有更好的方法来做到这一点,但这是我首先想到的, 这种方法使用正则expression式中的命名捕获组来使得powershell更容易按照基本文件名和修订进行sorting和分组。 最后一个variables$ filesToKeep将是一个FileInfo对象的数组,您可以从您的删除命令中排除。 当然,我build议在实际删除任何东西之前进行大量testing。
$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}