如何用PowerShell清理目录树中空文件夹及可选清理过期文件
PowerShell脚本:清理过期文件并删除空文件夹
下面是满足需求的PowerShell脚本,支持可选清理指定天数以上的旧文件,之后递归删除所有自身及下属目录均无文件的空文件夹(从最深层级开始处理,确保上层文件夹在下层清理后变为空时也能被删除):
param( [Parameter(Mandatory=$true)] [string]$TargetPath, [int]$DeleteFilesOlderThanDays ) # 验证目标目录是否存在 if (-not (Test-Path -Path $TargetPath -PathType Container)) { Write-Error "目标目录不存在:$TargetPath" exit 1 } # 可选:清理超过指定天数的旧文件 if ($DeleteFilesOlderThanDays -gt 0) { $cutoffDate = (Get-Date).AddDays(-$DeleteFilesOlderThanDays) Write-Host "开始清理 $TargetPath 中超过 $DeleteFilesOlderThanDays 天的文件..." Get-ChildItem -Path $TargetPath -File -Recurse | Where-Object { $_.LastWriteTime -lt $cutoffDate } | Remove-Item -Force -ErrorAction SilentlyContinue Write-Host "旧文件清理完成" } # 递归删除空文件夹(从最深层开始) Write-Host "开始删除空文件夹..." do { $emptyFolders = Get-ChildItem -Path $TargetPath -Directory -Recurse | Where-Object { # 检查当前文件夹及所有子目录是否都没有文件 -not (Get-ChildItem -Path $_.FullName -File -Recurse -ErrorAction SilentlyContinue) } if ($emptyFolders) { $emptyFolders | Remove-Item -Force -ErrorAction SilentlyContinue Write-Host "已删除 $($emptyFolders.Count) 个空文件夹" } } while ($emptyFolders) Write-Host "空文件夹清理完成"
脚本说明
- 必填参数:
-TargetPath:指定要处理的根目录路径 - 可选参数:
-DeleteFilesOlderThanDays:如果设置此参数(值需大于0),会先删除目录树中最后修改时间早于当前日期减去指定天数的所有文件
使用示例
- 仅删除空文件夹(不清理旧文件):
.\CleanupEmptyFolders.ps1 -TargetPath "D:\Your\Target\Directory"
- 先清理超过30天的旧文件,再删除空文件夹:
.\CleanupEmptyFolders.ps1 -TargetPath "D:\Your\Target\Directory" -DeleteFilesOlderThanDays 30
注意事项
- 脚本运行需要足够的文件系统权限
- 建议先在测试目录验证脚本效果,避免误删重要数据
-ErrorAction SilentlyContinue用于忽略权限不足或文件被占用等异常,如需查看错误信息可移除该参数
内容的提问来源于stack exchange,提问作者David B
相关产品推荐
相关产品推荐

