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

如何用Windows .bat脚本从index.html文件中提取版本号?

解决Windows bat脚本提取HTML中版本号的问题

嘿,我完全懂你踩的这个坑——Windows自带的findstr工具的正则语法和我们平时用的Perl/JavaScript风格正则差异很大,你之前写的\d{1,3}\.\d{1,3}\.\d{1,3}写法,findstr根本不识别,这就是命令失效的核心原因。

为什么你的命令失败?

findstr的正则规则有两个关键限制:

  • 不支持\d来指代数字,必须用[0-9]或者完整的[0123456789];
  • 不支持{n,m}这种区间量词,只能用*(匹配零次或多次)、?(匹配零次或一次,需搭配/r参数)。

正确的实现方法

这里给你两种实用方案,按需选择:

方案1:用for循环精准提取(推荐,可直接存变量)

这种方法先定位到包含版本号的行,再通过分隔符直接抓取版本号,稳定性拉满:

@echo off
setlocal enabledelayedexpansion

:: 遍历包含"Build version:"的行,提取版本号
for /f "tokens=3 delims=:- " %%a in ('findstr /C:"Build version:" index.html') do (
    set "extracted_version=%%a"
    goto :done  :: 找到后立即跳出循环,避免匹配多行
)

:done
if defined extracted_version (
    echo 成功提取版本号:!extracted_version!
) else (
    echo 未找到版本号信息
)
endlocal

细节说明:

  • findstr /C:"Build version:" index.html:精准锁定包含版本号的目标行;
  • tokens=3 delims=:- :指定用冒号、减号、空格作为分隔符,取第3个分隔后的内容(正好是1.0.1这类版本号);
  • goto :done确保只处理第一行匹配结果,防止文件中存在多行版本号时出现混乱。

方案2:修正findstr的正则表达式

如果只是想快速输出版本号,也可以调整正则适配findstr的规则,但要先限定行范围避免误匹配:

:: 先定位目标行,再提取版本号
findstr /r "Build version: [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" index.html ^
| findstr /o /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" ^
| for /f "tokens=2 delims=:" %%a in ('more') do echo %%a

细节说明:

  • 第一个findstr定位到包含版本号的行;
  • 第二个findstr /o输出匹配内容的位置和内容;
  • 最后用for循环去掉位置前缀,只保留纯版本号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:15:30