Windows批量/PowerShell单行命令按MM_dd_yyyy名称删文件夹仅留最近7天
按文件夹名称日期删除旧归档的单行Windows命令实现
需求与约束
- 录音归档目录下每日会生成名称格式为
MM_dd_yyyy的文件夹存储当日录音 - 要求仅保留最近7天的文件夹,删除其余旧文件夹,不允许依赖文件/文件夹的创建、修改时间元数据,必须完全基于文件夹名称的日期进行判断
- 受企业域安全策略限制,无法运行.ps1格式的PowerShell脚本,仅支持在bat/cmd文件中运行单行命令或嵌套for循环逻辑
原有获取保留文件夹列表的实现
可通过以下单行命令获取需要保留的最近7天的文件夹名称:
powershell $d0=(Get-Date).ToString('MM-dd_yyyy'); $d1=(Get-Date).AddDays(-1).ToString('MM-dd_yyyy'); $d2=(Get-Date).AddDays(-2).ToString('MM-dd_yyyy'); $d3=(Get-Date).AddDays(-3).ToString('MM-dd_yyyy'); $d4=(Get-Date).AddDays(-4).ToString('MM-dd_yyyy'); $d5=(Get-Date).AddDays(-5).ToString('MM-dd_yyyy'); $d6=(Get-Date).AddDays(-6).ToString('MM-dd_yyyy'); $d0; $d1; $d2; $d3; $d4; $d5; $d6
例如2021年11月20日运行该命令,返回的保留文件夹列表如下:
11_20_2021 11_19_2021 11_18_2021 11_17_2021 11_16_2021 11_15_2021 11_14_2021
优化后可直接执行删除的单行命令
无需嵌套循环,简洁易读,可直接放入bat/cmd文件中运行:
powershell "($f=Get-ChildItem -Path 'D:\PosConvSav' -Filter '*_*_*' -Directory | Where-Object { $_.Name -match '\d{2}_\d{2}_\d{4}' } | Sort-Object -Descending)[7..($f.Count)] | Remove-Item -Recurse -Force"
提示:将命令中的
D:\PosConvSav替换为实际的录音归档目录路径即可使用;如需调整保留天数,只需修改方括号内的起始数值即可,比如保留10天就改为[10..($f.Count)]。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

