如何用Batch脚本从JSON文本提取paper-1.19.2-x的最高x值
提取PaperMC 1.19.2最高构建号的Batch脚本方案
问题根源分析
- 第一段脚本输出
paper-1.19.2-.jar,是因为构建号提取逻辑错误,未正确匹配到paper-1.19.2-后的数字内容,导致截取结果为空,大概率是分割符选择不当或字符串截取位置错误。 - 第二段输出时间片段
05T23:08:28,是因为脚本的匹配规则过于宽泛,误将JSON中的时间戳字段当成了构建号,没有精准定位目标文件名的数字部分。
正确的Batch脚本实现
以下是基于PaperMC构建JSON结构编写的精准提取脚本:
@echo off setlocal enabledelayedexpansion :: 初始化最高构建号为0 set "highest_build=0" :: 遍历builds.txt中包含目标文件名的行 for /f "tokens=2 delims=-,\" %%a in ('type builds.txt ^| findstr "paper-1.19.2-"') do ( :: 提取构建号并去除.jar后缀 set "current_build=%%a" if "!current_build:~-4!"==".jar" set "current_build=!current_build:~0,-4!" :: 比较并更新最高构建号 if !current_build! gtr !highest_build! set "highest_build=!current_build!" ) :: 输出结果 echo 最高构建号: !highest_build! echo 对应文件名: paper-1.19.2-!highest_build!.jar endlocal
脚本关键逻辑说明
enabledelayedexpansion:启用延迟变量扩展,保证循环内变量的实时更新生效。findstr "paper-1.19.2-":精准过滤出包含目标文件名的行,避免误匹配时间等无关字段。tokens=2 delims=-,\":以-、,、"为分隔符,提取paper-1.19.2-后的内容,处理可能带有的.jar后缀。- 数字大小比较:循环遍历所有构建号,动态更新最大值。
无文件依赖的替代方案
如果不需要先保存JSON文件,可以直接通过curl请求API并实时解析,减少中间步骤:
@echo off setlocal enabledelayedexpansion set "highest_build=0" for /f "tokens=2 delims=:,\" %%a in ('curl -s api.papermc.io/v2/projects/paper/versions/1.19.2/builds ^| findstr "\"build\""') do ( set "current_build=%%a" if !current_build! gtr !highest_build! set "highest_build=!current_build!" ) echo 最高构建号: !highest_build! echo 对应下载路径格式: api.papermc.io/v2/projects/paper/versions/1.19.2/builds/!highest_build!/downloads/paper-1.19.2-!highest_build!.jar endlocal
这个方案直接从PaperMC的API接口提取"build"字段的数字,彻底避免文件操作和误匹配问题。
内容的提问来源于stack exchange,提问作者BlueXAyman
相关产品推荐
相关产品推荐

