在文件夹中保留文件的 x 个版本 - 删除其余部分

Keep x versions of a file in Folder - delete rest

我有一个备份过程,可以制作文件副本并在最后附加系统时间。日期戳表示通过 FTP (ddMMYYYYhhmmss) 收到文件的时间。

fileName1.ZIP02062015090653
fileName1.ZIP01062015090653
fileName1.ZIP31052015090653
fileName1.ZIP29052015090653
fileName1.ZIP28052015090653
fileName1.ZIP21052015090653
fileName2.ZIP02062015090653
fileName3.ZIP02062015090653
reportName1.PDF02062015090653
reportNameX.TXT02062015090653
etc..

我需要脚本来保留每个文件的 5 个最新版本。

i.e. fileName1.ZIP21052015090653 <- this should get deleted.

我正在尝试使用下面的脚本,但它删除了第 5 个文件之后的所有内容..

gci C:\temp\ -Recurse| where{-not $_.PsIsContainer}| sort CreationTime -desc| 
    select -Skip 5| Remove-Item -Force

我不介意脚本是否使用 fileName、dateModified、creationTime 或 DateStamp - 我希望能够保留每个文件的 5 个版本并删除最旧的版本。

试试这个:

gci C:\temp\ -Recurse | 
where{-not $_.PsIsContainer} |
Group-Object basename |
foreach {
  $_.Group |
  sort CreationTime -Descending |
  Select -Skip 5 |
   foreach { Remove-Item $_.fullname -Force -WhatIf }
  }

这将按基本名称对文件进行分组,然后在每个组中 sort/delete。
如果结果看起来正确,请删除 -Whatif 并重新运行 实际删除文件。