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

PowerShell批量修改JPG文件名:删除首个下划线前前缀及排重

修正PowerShell批量重命名JPG文件的问题

原代码的核心问题

  1. 文件名截取错误:$_.Name.Split("_")[1]仅提取了第一个下划线与第二个下划线之间的片段,而非第一个下划线之后的全部内容,导致最终文件名丢失后半部分(比如12_defg_0001.jpg会被截成defg,而非预期的defg_0001.jpg)。
  2. 未处理重复文件名:当多个文件处理后生成相同文件名时,重命名操作会因冲突失败。

修正后的代码

$mainfolder = "C:\Users"
# 仅遍历目标文件夹下的JPG文件,排除子文件夹
Get-ChildItem -Path $mainfolder -Filter *.jpg -File | ForEach-Object {
    # 提取第一个下划线之后的完整文件名(含扩展名)
    $newName = $_.Name -replace '^[^_]+_', ''
    $targetPath = Join-Path -Path $_.DirectoryName -ChildPath $newName

    # 处理文件名重复的情况:自动添加序号后缀
    $counter = 1
    while (Test-Path -Path $targetPath) {
        $baseName = [System.IO.Path]::GetFileNameWithoutExtension($newName)
        $extension = [System.IO.Path]::GetExtension($newName)
        $newName = "$baseName($counter)$extension"
        $targetPath = Join-Path -Path $_.DirectoryName -ChildPath $newName
        $counter++
    }

    # 执行重命名(-WhatIf用于预览操作,确认无误后可删除)
    Rename-Item -Path $_.FullName -Destination $targetPath -WhatIf
}

关键说明

  • 正则截取文件名:-replace '^[^_]+_', ''通过正则匹配,直接删除从文件名开头到第一个下划线(含下划线)的所有内容,确保保留第一个下划线之后的完整部分。
  • 精准筛选文件:-Filter *.jpg -File限定只处理JPG格式的文件,避免误操作文件夹或其他类型文件。
  • 重复文件名处理:通过Test-Path检查目标文件名是否已存在,若存在则自动在文件名后添加(1)、(2)等序号,直到生成唯一文件名。
  • 预览模式:代码中的-WhatIf参数会显示所有将要执行的重命名操作,不会实际修改文件。确认操作符合预期后,删除该参数即可执行真实重命名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:05:20