如何用PowerShell恢复默认文件名并按创建时间重编号音乐文件
问题背景
在Windows 10系统下需要按文件创建日期为音乐文件重新编号,先后使用两个PowerShell脚本均未达到预期:
- 第一个脚本未按创建日期排序,执行效果不符合要求:
[ref]$i = 1; gci -file | Rename-Item -NewName {'{0:D} - {1}' -f $i.Value++, $_}
- 第二个脚本存在语法错误,执行后所有文件名损坏,变为纯数字格式:
$count = 1; Get-ChildItem -File | Sort-Object LastWriteTime | Rename-Item -NewName { '{0:D {1}' -f $script:count++, $_.Extension }
异常文件名效果参考:
操作步骤
第一步:恢复原始文件名
优先使用撤销操作恢复:如果执行错误重命名后没有关闭目标文件夹、没有进行其他文件操作,直接在文件夹空白处按
Ctrl+Z即可批量撤销重命名,一键恢复所有原始文件名。
如果已经无法通过撤销恢复,可通过文件夹属性中的「以前的版本」功能,选择重命名操作之前的还原点恢复文件名称。
第二步:按创建日期重新编号
原有脚本问题说明
之前两个脚本失效的核心原因:
- 排序规则错误:第一个脚本默认按文件系统枚举顺序排序,第二个脚本按最后修改时间排序,均未使用创建日期属性
- 语法错误:第二个脚本的格式化字符串缺失闭合大括号,且未传入原始文件名参数,导致文件名丢失
- 计数逻辑不稳定:第一个脚本使用ref传值计数,在管道执行中容易出现序号错乱
正确重命名脚本
执行前先打开PowerShell,通过cd 你的音乐文件夹路径命令进入目标音乐目录,先执行预览版脚本确认效果:
$count = 1 # 筛选常见音乐格式,可自行增删扩展名列表 Get-ChildItem -File | Where-Object { $_.Extension -in '.mp3','.flac','.wav','.m4a','.ape' } | Sort-Object CreationTime -Descending | Rename-Item -NewName { '{0} - {1}' -f $script:count++, $_.Name } -WhatIf
执行后PowerShell会列出所有待执行的重命名操作,确认序号规则(最新创建的文件序号为1)、文件名拼接规则(序号 - 原始文件名)符合预期后,删除脚本末尾的-WhatIf参数重新执行,即可完成批量重命名,最终效果为最新的song1.mp3会被重命名为1 - song1.mp3。
内容的提问来源于stack exchange,提问作者M.Barandov
相关产品推荐
相关产品推荐

