PowerShell实现带全局计数器与目录内序号的照片批量重命名
PowerShell批量照片重命名代码修正
需求明确:要把照片批量重命名成PHOTO1000_NAMEA_1.jpg、PHOTO1001_NAMEA_2.jpg这类格式,满足两个要求:
- 全局计数器从1000开始递增,紧跟在PHOTO后面
- 文件名末尾要加上当前目录内的照片序号
原代码的问题很明显:
- 全局计数器只设了初始值1000,但每次处理文件后没递增,导致所有文件都会用同一个序号
- 完全没处理目录内的本地序号逻辑
修正后的代码如下:
# 初始化全局计数器,从1000起步 $globalCount = 1000 # 先按目录分组,再逐个目录处理生成本地序号 Get-ChildItem -Recurse -Include *.jpg | Group-Object -Property Directory | ForEach-Object { # 按文件创建时间排序,保证目录内序号顺序合理(也可以换成LastWriteTime) $localFiles = $_.Group | Sort-Object -Property CreationTime $localCount = 1 foreach ($file in $localFiles) { # 拼接符合要求的新文件名 $newName = "PHOTO{0}_{1}_{2}{3}" -f $globalCount, $file.Directory.Name, $localCount, $file.Extension # -WhatIf用于预览重命名结果,确认没问题后删掉这个参数再执行 Rename-Item -LiteralPath $file.FullName -NewName $newName -WhatIf # 处理完一个文件,两个计数器都加1 $globalCount++ $localCount++ } }
几个关键改动说明:
- 用
Group-Object按目录分组,这样能给每个目录里的文件单独编本地序号 - 给目录内的文件加了排序逻辑,避免序号乱序
- 每次处理文件后同时递增全局和本地计数器,保证两个序号都正常增长
- 调整了文件名格式,去掉了原代码里PHOTO后面的下划线,完全匹配需求里的命名样式
内容的提问来源于stack exchange,提问作者Marylink_27
相关产品推荐
相关产品推荐

