如何用PowerShell按日期排序并给不同扩展名文件批量重命名加序号
iPhone照片/视频按日期排序并添加递增序号的实现方案
需求
将两部iPhone导出的照片、视频按日期排序,给每个文件名加上四位递增序号,格式示例:0001 - 原文件名。
已尝试的代码(未达预期)
参考案例拼凑的代码,运行后未实现目标:
$count = 1 Get-ChildItem -Path 'C:\Users\miste\OneDrive\Desktop\Finalized Seattle Pictures' -File | Sort-Object CreationTime | Rename-Item -NewName {'{0:D4} - {1}' -f $script:count++, $_ } -WhatIf
用于验证排序的测试代码
他人提供的测试代码,可查看前5个文件的排序结果:
Get-ChildItem -Path 'C:\Users\miste\OneDrive\Desktop\Finalized Seattle Pictures' -File | Sort-Object CreationTime | Select-Object Name, CreationTime -First 5
正确实现代码
基础修正版(按系统创建时间排序)
修复原代码未明确指定文件名的问题,确保序号正确递增:
$count = 1 Get-ChildItem -Path 'C:\Users\miste\OneDrive\Desktop\Finalized Seattle Pictures' -File | Sort-Object CreationTime | Rename-Item -NewName { '{0:D4} - {1}' -f $script:count++, $_.Name } -WhatIf
优化版(按实际拍摄日期排序)
iPhone导出的媒体文件,系统CreationTime可能不是实际拍摄时间,优先用照片的拍摄日期属性排序:
$count = 1 Get-ChildItem -Path 'C:\Users\miste\OneDrive\Desktop\Finalized Seattle Pictures' -File | # 针对照片视频优先用拍摄日期,其他文件 fallback 到创建时间 Sort-Object { if ($_.Extension -in '.jpg', '.jpeg', '.png', '.mov', '.mp4') { $_.DateTaken ?? $_.CreationTime } else { $_.CreationTime } } | Rename-Item -NewName { '{0:D4} - {1}' -f $script:count++, $_.Name } -WhatIf
注意事项
- 代码中的
-WhatIf参数用于预览重命名结果,确认输出符合预期后,删除该参数即可执行实际重命名操作。 - 若
DateTaken属性无法识别,需确保PowerShell版本为5.1及以上(Windows系统默认对常见媒体格式支持该属性)。
内容的提问来源于stack exchange,提问作者Xyntak
相关产品推荐
相关产品推荐

