PowerShell通配符路径脚本无法删除15天以上旧文件问题排查
问题分析与解决方案
你的脚本无法正常工作的核心原因不是$folder变量不支持通配符,而是Get-ChildItem的-Path参数对路径中非最后一段的通配符处理有限。你定义的路径(比如C:\*_TEST\123*\Archive*)包含多段通配符目录,直接传入-Path无法正确枚举到真实存在的目标文件夹。
修正后的脚本
# 定义带通配符的文件夹路径模式 $folderPatterns = @( "C:\*_TEST\123*\Archive*", "C:\*_TEST\456*\ACK*\Archive*", "C:\*_TEST\789\Ack\Archive_Acks" ) # 遍历每个路径模式,解析为真实存在的文件夹 foreach ($pattern in $folderPatterns) { # 枚举匹配模式的所有文件夹,忽略不存在的情况 $targetFolders = Get-ChildItem -Path $pattern -Directory -ErrorAction SilentlyContinue if (-not $targetFolders) { Write-Host "未找到匹配模式的文件夹: $pattern" continue } # 处理每个真实文件夹 foreach ($folder in $targetFolders) { Write-Host "正在处理文件夹: $($folder.FullName)" # 筛选并删除15天以上的旧文件 Get-ChildItem -Path $folder.FullName -File -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-15) } | ForEach-Object { Remove-Item $_.FullName -Force Write-Host "已删除: $($_.FullName)" } } } Write-Host "清理完成。"
关键修改说明
- 先用
Get-ChildItem -Directory解析通配符模式,得到真实存在的文件夹路径,再基于这些真实路径执行文件清理 - 移除了路径末尾的反斜杠,避免路径解析时出现异常
- 增加了
-ErrorAction SilentlyContinue,防止因找不到匹配文件夹导致脚本中断 - 增加了日志输出,方便排查哪些文件夹被处理、哪些未找到
注意事项
- 测试阶段可以先注释掉
Remove-Item行,改用Write-Host输出待删除文件路径,确认逻辑无误后再执行删除操作 - 确保运行脚本的账号拥有目标文件夹的读取和删除权限
- 如果需要处理隐藏文件,可在
Get-ChildItem中添加-Force参数
内容的提问来源于stack exchange,提问作者Tim Caverly
相关产品推荐
相关产品推荐

