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

如何移除Jar文件名中的版本号实现通用重命名?

通用Jar文件去版本号重命名方案

针对你遇到的版本号格式变化导致固定截取失效的问题,这里提供两种通用解决方案,分别适用于批处理(CMD)和PowerShell场景,能适配不同长度的版本号(如1.0.0、11.0.0、1.0.12等)。

PowerShell方案(推荐,更简洁灵活)

PowerShell的正则表达式匹配能轻松处理动态版本号格式,命令如下:

Get-ChildItem *.jar | Where-Object { $_.BaseName -match '(.+)-\d+\.\d+\.\d+' } | Rename-Item -NewName { $matches[1] + '.jar' }

说明:

  • Get-ChildItem *.jar:获取当前目录下所有Jar文件
  • Where-Object { $_.BaseName -match '(.+)-\d+\.\d+\.\d+' }:过滤出符合「前缀-版本号」格式的文件,版本号匹配数字.数字.数字的模式(如果你的版本号有其他格式,比如带字母,可以调整正则为(.+)-[\d.]+\w?之类的)
  • Rename-Item -NewName { $matches[1] + '.jar' }:用正则匹配到的前缀(即()捕获的部分)作为新文件名,加上.jar扩展名完成重命名

批处理(CMD)方案

如果必须使用CMD批处理,可以通过循环分割字符串来定位最后一个-的位置,实现通用重命名:

@echo off
setlocal enabledelayedexpansion

:: 遍历当前目录下所有jar文件
for %%F in (*.jar) do (
    set "fullname=%%~nF"  :: 获取不含扩展名的文件名(如test-java-1.0.0)
    set "newname="
    set "temp=!fullname!"
    
    :: 循环分割字符串,提取最后一个'-'之前的部分
    :split_loop
    if "!temp!" equ "" goto end_split
    for /f "delims=- tokens=1*" %%A in ("!temp!") do (
        if not "%%B" equ "" (
            :: 如果不是最后一段,拼接前缀
            if not defined newname (
                set "newname=%%A"
            ) else (
                set "newname=!newname!-%%A"
            )
            set "temp=%%B"
            goto split_loop
        )
    )
    :end_split
    
    :: 执行重命名(确保newname有效)
    if defined newname (
        echo 重命名: %%F → !newname!.jar
        rename "%%F" "!newname!.jar"
    )
)
endlocal

说明:

  • 启用enabledelayedexpansion来支持循环中的变量动态更新
  • 通过for /f按-分割字符串,循环处理直到最后一段(版本号部分),拼接前面的所有段作为新文件名
  • 加入了echo输出重命名过程,方便你确认操作

测试一下这两种方案,不管版本号是1.0.0、11.0.0还是1.0.12,都能正确将test-java-xxx.jar重命名为test-java.jar,test-compile-xxx.jar重命名为test-compile.jar。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:44:03