Powershell 删除超过 X 天的文件,但保留至少 1

Powershell 删除超过 X 天的文件,但保留至少 1

每次我们写入更改时,我都会自动备份我的交换机/路由器配置...这是通过 ftp 将文本文件发送到文件夹来完成的。

我正在尝试编写一个脚本,删除目录中超过 15 天的所有文件。但是我想保留每个设备的最新文件,即使它超过 15 天。

文件命名的格式如下:最新文件名为 Hostname-Config-Change.txt,当被较新的更改覆盖时,它将重命名为:Hostname-Config-Change_MM-DD-YY_HH-MM-SS_Time.txt

我认为最简单的方法是删除所有超过 15 天且名称中包含日期和时间的文件。我不知道该怎么做,虽然我找到了两种方法,但我还没有找到同时做这两种方法的方法。

提前感谢您提供的任何帮助。

这是我目前的代码。我现在使用 powershell,所以任何建议都会很感激。

#Set Variables

# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)

#Set path of Files to be scanned & deleted
$path = "Directory to Files"

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

#End of Script

答案1

只是为了方便所有关注的人使用。使用上面的回复,我能够弄清楚如何使用正则表达式来查看文件名中包含日期超过 X 天的任何文件。最新文件的文件名中不包含日期,所以它对我来说是有效的。请注意,您必须根据日期的语法调整正则表达式。

#Set Variables

# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)

#Set path of Files to be scanned & deleted
$path = "D:\BACKUPS\ConfigChange"

# Delete files older than the $limit and matching the dates in the file name.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.BaseName -match '(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})' -and $_.CreationTime -lt $limit } | Remove-Item -Force

#End of Script

相关内容