每次我们写入更改时,我都会自动备份我的交换机/路由器配置...这是通过 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