请求PowerShell/CMD脚本:删除嵌套文件夹中30天以上PNG文件(通配符问题)
解决ForFiles文件夹通配符失效问题
问题原因
ForFiles的/p参数仅支持单个具体路径,不支持通配符(比如Process*),所以你之前的命令无法识别目标文件夹。
方案1:PowerShell原生脚本(推荐)
直接用PowerShell的文件处理命令,更灵活且符合你的脚本需求:
# 先预览要删除的文件(安全测试,确认无误后去掉-WhatIf) Get-ChildItem -Path "C:\Runs\Process*" -Recurse -Filter "*.png" -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -WhatIf # 确认后执行删除(去掉-WhatIf) Get-ChildItem -Path "C:\Runs\Process*" -Recurse -Filter "*.png" -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item
- 说明:
Get-ChildItem -Path "C:\Runs\Process*":枚举所有以Process-开头的子文件夹-Recurse:遍历嵌套子目录(比如AppFiles)-Filter "*.png":只筛选PNG文件Where-Object:过滤出最后修改时间超过30天的文件-WhatIf:测试模式,仅输出要删除的文件路径,不会实际删除
方案2:CMD命令(兼容原有ForFiles逻辑)
用for /d循环枚举符合条件的文件夹,再逐个调用ForFiles:
for /d %%G in ("C:\Runs\Process*") do ( ForFiles /p "%%G" /s /d -30 /m "*.png" /c "cmd /c del @path" )
- 说明:
for /d %%G in ("C:\Runs\Process*"):遍历C:\Runs下所有以Process-开头的目录- 对每个目录
%%G,执行ForFiles命令删除30天以上的PNG文件 /c "cmd /c del @path":添加实际删除动作(原命令仅列出文件,需加此参数才会删除)
内容的提问来源于stack exchange,提问作者Rusty
相关产品推荐
相关产品推荐

