在文件夹中保留文件的 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 并重新运行 实际删除文件。
我有一个备份过程,可以制作文件副本并在最后附加系统时间。日期戳表示通过 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 并重新运行 实际删除文件。