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

时间:2015-06-03 11:42:54

标签: powershell backup

我有备份过程,它会复制文件并在最后添加系统时间。日期戳表示通过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个版本并吹走最旧版本。

1 个答案:

答案 0 :(得分:0)

试试这个:

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

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