如何编写Windows Batch脚本选取文件夹中最高版本对应的ivy.xml文件
Windows Batch 版本筛选实现代码
适用标准x.y.z单数字段版本(如1.0.0、2.0.1)
@echo off setlocal enabledelayedexpansion :: 脚本默认放置在所有Program目录的同级根目录(Release目录)下运行 for /d %%p in (Program*) do ( set "latest_version=" :: 遍历版本目录按名称正序排列,最后赋值的即为最高版本 for /d %%v in ("%%p\*") do ( set "latest_version=%%~nxv" ) :: 输出目标文件路径,可替换为你需要的业务逻辑(如复制、读取解析等) echo %%p/!latest_version!/ivy.xml ) endlocal pause
适配多数字段版本(如1.10.0 > 1.2.0 场景)
@echo off setlocal enabledelayedexpansion for /d %%p in (Program*) do ( set "latest_ver=0.0.0" for /d %%v in ("%%p\*") do ( set "current_ver=%%~nxv" call :ver_compare "!current_ver!" "!latest_ver!" if !res! gtr 0 set "latest_ver=!current_ver!" ) echo %%p/!latest_ver!/ivy.xml ) endlocal pause exit /b :: 版本号比较函数,入参%1=新版本,%2=旧版本,返回res大于0则新版本更大 :ver_compare set "v1=%~1" set "v2=%~2" :: 拆分版本号为三段,可根据你的版本段位数量调整 for /f "tokens=1-3 delims=." %%a in ("%v1%") do ( set v1_major=%%a set v1_minor=%%b set v1_patch=%%c ) for /f "tokens=1-3 delims=." %%a in ("%v2%") do ( set v2_major=%%a set v2_minor=%%b set v2_patch=%%c ) :: 逐段转数字比较 if %v1_major% gtr %v2_major% (set res=1&goto :eof) if %v1_major% lss %v2_major% (set res=-1&goto :eof) if %v1_minor% gtr %v2_minor% (set res=1&goto :eof) if %v1_minor% lss %v2_minor% (set res=-1&goto :eof) if %v1_patch% gtr %v2_patch% (set res=1&goto :eof) if %v1_patch% lss %v2_patch% (set res=-1&goto :eof) set res=0 goto :eof
说明
- 第一段代码轻量高效,适合版本号每一段都是单个数字的场景
- 第二段代码通过版本号逐段比较实现,适配更高阶的版本号规则,可根据你实际的版本段位(比如四位版本号1.2.3.4)修改拆分逻辑的tokens参数
内容的提问来源于stack exchange,提问作者Oli
相关产品推荐
相关产品推荐

