如何移除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
相关产品推荐
相关产品推荐

