求PowerShell脚本:删除7天前目录,保留每月1日创建的目录
解决PowerShell删除旧目录时排除每月1日目录的问题
原脚本的问题在于错误使用字符串匹配判断目录创建日期,且仅比对当前月份的1号,未针对目录自身创建日期的日部分做判断,导致排除逻辑失效。
正确逻辑需同时满足两个条件:
- 目录创建时间早于7天前
- 目录创建时间的日部分不是1号
修正后的脚本:
Get-ChildItem C:\PSScripts\test -Recurse -Directory | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-7) -and $_.CreationTime.Day -ne 1 } | Remove-Item -Force -Recurse
关键修正说明:
- 直接调用
$_.CreationTime.Day获取目录创建日期的日数值,用-ne 1判断是否非1号,这是DateTime对象的原生属性,比字符串匹配更准确可靠。 - 原脚本的
-notlike属于字符串匹配逻辑,生成的是当前月1号的格式化字符串,无法覆盖其他月份1号创建的目录,逻辑完全错误。
安全测试建议:
执行删除操作前,可先移除Remove-Item部分,用Select-Object查看待删除目录的信息,确认无误后再执行删除:
Get-ChildItem C:\PSScripts\test -Recurse -Directory | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-7) -and $_.CreationTime.Day -ne 1 } | Select-Object Name, CreationTime
内容的提问来源于stack exchange,提问作者SHV
相关产品推荐
相关产品推荐

