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

PowerShell/CMD实现文件版本字母自动递增重命名需求

自动递增文件名中的版本字母(PowerShell/CMD实现)

PowerShell 脚本方案

这个脚本会遍历当前目录的文件,自动识别文件名主体(不含扩展名)中最后一个独立的字母作为版本标识,将其递增为字母表中的下一个字母(Z→A,z→a),保留前缀、后缀和扩展名不变。

Get-ChildItem -File | ForEach-Object {
    # 分离文件名和扩展名
    $baseName = $_.BaseName
    $extension = $_.Extension

    # 正则匹配:捕获前缀、版本字母、后缀(版本字母是最后一个独立字母)
    if ($baseName -match '(.*?)([A-Za-z])([^A-Za-z]*)$') {
        $prefix = $matches[1]
        $versionChar = $matches[2]
        $suffix = $matches[3]

        # 计算下一个字母
        $asciiCode = [int][char]$versionChar
        if ($versionChar -ceq 'Z') {
            $nextChar = 'A'
        } elseif ($versionChar -ceq 'z') {
            $nextChar = 'a'
        } else {
            $nextChar = [char]($asciiCode + 1)
        }

        # 构造新文件名
        $newBaseName = "$prefix$nextChar$suffix"
        $newName = "$newBaseName$extension"

        # 重命名(如果新文件名不存在)
        if (-not (Test-Path $newName)) {
            Rename-Item -Path $_.FullName -NewName $newName
            Write-Host "重命名: $($_.Name) → $newName"
        } else {
            Write-Host "跳过: $newName 已存在"
        }
    } else {
        Write-Host "跳过: $($_.Name) 未找到版本字母"
    }
}

关键说明

  • 正则表达式(.*?)([A-Za-z])([^A-Za-z]*)$:精准匹配文件名主体最后一个字母,前后可包含数字、符号等任意非字母内容
  • 处理字母循环:大写Z自动转为A,小写z转为a,避免超出字母范围
  • 安全检查:重命名前先判断新文件名是否存在,避免覆盖

CMD 批处理方案

CMD的字符串处理能力有限,此方案假设版本字母是文件名主体(不含扩展名)的最后一个字符且为字母,适合结构相对简单的文件名(如AAA111A.txt、file-vB.docx)。

@echo off
setlocal enabledelayedexpansion

for %%f in (*.*) do (
    set "filename=%%~nf"
    set "ext=%%~xf"
    set "lastChar=!filename:~-1!"

    :: 判断最后一个字符是否为字母
    echo !lastChar! | findstr /i "[A-Z]" >nul
    if not errorlevel 1 (
        :: 转换为ASCII码并递增
        set "ascii=!lastChar!"
        for /f %%a in ('powershell -command "[int][char]'!ascii!'") do set "asciiCode=%%a"
        
        :: 处理Z/z循环
        if !asciiCode! equ 90 set "nextChar=A"
        if !asciiCode! equ 122 set "nextChar=a"
        if not !asciiCode! equ 90 if not !asciiCode! equ 122 (
            set /a "nextAscii=asciiCode+1"
            for /f %%b in ('powershell -command "[char]!nextAscii!"') do set "nextChar=%%b"
        )

        :: 构造新文件名
        set "newFilename=!filename:~0,-1!!nextChar!!ext!"
        
        :: 检查文件是否存在并重命名
        if not exist "!newFilename!" (
            ren "%%f" "!newFilename!"
            echo 重命名: %%f → !newFilename!
        ) else (
            echo 跳过: !newFilename! 已存在
        )
    ) else (
        echo 跳过: %%f 未找到版本字母
    )
)

endlocal
pause

关键说明

  • 依赖PowerShell辅助处理ASCII码转换(CMD本身无法直接处理字符转ASCII)
  • 仅识别文件名主体最后一个字符为版本字母,适合多数常见场景
  • 同样包含重命名安全检查,避免文件覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:45:41