使用PowerShell与正则表达式批量重命名文件名中的日期格式
解决方案
直接用下面的PowerShell命令就能实现通用的重命名需求,先看预览结果没问题再执行实际修改:
# 先预览修改效果,确认无误后去掉 -WhatIf 参数 Get-ChildItem -Recurse -Filter "*.md" | Where-Object { $_.BaseName -match '\d{2}\d{2}\d{4}' } | Rename-Item -NewName { $_.Name -replace '(\d{2})(\d{2})\d{2}(\d{2})(\.md)', '$1$2$3$4' } -WhatIf
命令拆解
Get-ChildItem -Recurse -Filter "*.md":递归遍历当前目录下所有Markdown文件,用-Filter比后续筛选更高效。Where-Object { $_.BaseName -match '\d{2}\d{2}\d{4}' }:只保留文件名(不含扩展名)里包含MMDDYYYY格式的文件,避免重复处理已经是MMDDYY格式的文件。-replace '(\d{2})(\d{2})\d{2}(\d{2})(\.md)':用正则捕获组精准匹配日期部分:$1对应月份(MM)$2对应日期(DD)$3对应原年份的后两位(YY)$4保留.md扩展名
替换后就把MMDDYYYY转换成了MMDDYY。
-WhatIf:这个参数会模拟重命名操作,只输出修改结果不会实际改动文件,建议先运行预览,确认所有修改符合预期后再去掉这个参数执行真实重命名。
更精准的匹配(可选)
如果要确保只匹配文件名末尾的日期(避免文件名中间的年份被误改),可以把Where-Object的条件改成:
Where-Object { $_.BaseName -match '\d{2}\d{2}\d{4}$' }
这样只会处理文件名最后是MMDDYYYY的文件,比如project05152024.md会被处理,但report20240515v2.md不会被误改。
内容的提问来源于stack exchange,提问作者JTB
相关产品推荐
相关产品推荐

