PowerShell按创建时间删文件异常:更早月份文件未删除如何解决?
问题分析与解决
你的脚本有两个核心问题导致更早的文件/文件夹没被删除:
Get-Childitem默认只遍历目标目录的直接子项,不会深入子文件夹,所以子目录里的旧文件根本没被检测到。- 删除文件夹时,
Remove-Item需要加-Recurse参数才能删除非空文件夹,否则会执行失败。
修正后的脚本
if (((Get-Volume -DriveLetter C).SizeRemaining / 17Gb) -lt 5) { # 删除Dumps文件夹(保留原有逻辑,确保删除非空目录) Remove-Item –path c:\testfolder\Dumps –Recurse -Force # 遍历testfolder下所有层级的文件和文件夹,删除创建时间早于2小时的项 Get-ChildItem "c:\testfolder" -Recurse | Where-Object { $_.CreationTime -lt (Get-Date).AddHours(-2) } | Remove-Item -Recurse -Force } else { Write-Output "False" }
关键修改说明
- 给
Get-ChildItem添加-Recurse:让PowerShell遍历c:\testfolder下的所有层级,包括子文件夹里的内容,确保不会漏掉深层的旧文件。 - 给
Remove-Item添加-Recurse -Force:既可以删除非空文件夹,又能跳过只读文件、隐藏文件的删除确认提示,避免脚本中断。 - 时间判断逻辑保持不变:
(Get-Date).AddHours(-2)生成当前时间往前推2小时的时间戳,所有创建时间早于该时间的项(不管是去年还是上月的)都会被匹配并删除。
测试建议
先把脚本里的 Remove-Item 替换成 Select-Object FullName, CreationTime,运行后查看输出列表,确认哪些项会被删除,避免误删重要内容。
内容的提问来源于stack exchange,提问作者Foertsch
相关产品推荐
相关产品推荐

