You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell批量重命名分组文件时自动编号避免重名报错咨询

PowerShell 按文件名标识分组批量重命名方案

原脚本问题说明

原有脚本仅通过固定位置截取字符串生成新文件名,没有对相同中间标识的文件做分组计数,同组文件会生成完全重复的文件名,触发系统重名报错导致文件被跳过。

可直接使用的修正脚本

脚本逻辑为先按下划线拆分文件名提取中间段作为分组key,同组内自动生成从1开始的递增序号,完全避免重名问题:

# 获取当前目录下所有待处理文件,仅匹配文件不处理文件夹
Get-ChildItem -File -Filter *.jpg |
    # 按下划线拆分文件名,取第二段作为分组标识
    Group-Object { $_.BaseName.Split('_')[1] } |
    ForEach-Object {
        $fileGroup = $_.Group
        # 组内从1开始生成递增序号
        for ($index = 0; $index -lt $fileGroup.Count; $index++) {
            $targetName = "{0}_{1}{2}" -f $_.Name, ($index + 1), $fileGroup[$index].Extension
            Rename-Item -LiteralPath $fileGroup[$index].FullName -NewName $targetName
        }
    }

脚本说明

  • 分组逻辑完全匹配当前命名规则:针对xxx_分组标识_xxx.后缀格式的文件,自动提取中间段作为分组依据
  • 每组独立维护计数器,同组序号从1开始递增,不会出现跨组混编、同组重名的问题
  • 先完成全量文件分组枚举再执行重命名,避免边遍历边修改文件名导致的重复处理、漏处理问题
  • 用-LiteralPath参数处理文件,兼容带特殊字符的文件名,不会出现路径解析错误

使用注意事项

  • 如果需要处理所有格式文件而非仅jpg,删除-Filter *.jpg参数即可
  • 如果需要调整组内编号排序规则(比如按文件创建时间、修改时间排序编号),可在Get-ChildItem命令后追加排序逻辑,例如按创建时间升序编号:
    Get-ChildItem -File -Filter *.jpg | Sort-Object CreationTime | Group-Object { $_.BaseName.Split('_')[1] }
    
  • 首次执行前可将Rename-Item行替换为以下命令预览重命名结果,确认规则符合预期后再执行实际重命名:
    Write-Host "原文件名: $($fileGroup[$index].Name) -> 新文件名: $targetName"
    

内容的提问来源于stack exchange,提问作者Pepe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:24:28