如何用Windows批处理提取区间字符串:从DASH XML的Representation标签提取UUID值
批处理提取DASH XML中指定UUID的实现
需求说明
现有一段经HTML实体转义的DASH XML片段,原文结构还原后为:
<AdaptationSet maxHeight="576" maxWidth="1024" mimeType="video/mp4" id="0" segmentAlignment="true" startWithSAP="1"> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" cenc:default_KID="bcf950eb-a062-5b0d-b1f2-fed53f20ba10"> <cenc:pssh>AAAATHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAACwiJGFlNWU5NTk4LWU5ODktNWM1Ny1iOTk2LTg3OTA4NWIyYzUxNUjj3JWbBg==</cenc:pssh> </ContentProtection> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="bcf950eb-a062-5b0d-b1f2-fed53f20ba10" /> <SegmentTemplate duration="6000" initialization="$RepresentationID$/video/init.mp4" media="$RepresentationID$_184201/segment_$Number$.m4s" startNumber="0" timescale="1000" /> <Representation bandwidth="247600" codecs="avc1.64001F" height="144" width="256" id="ae5e9598-e989-5c57-b996-879085b2c515-0_video_frag_auto.idx~video_frag_auto~481" scanType="progressive" /> </AdaptationSet>
注意:原文中所有引号均为HTML实体转义格式
",首行AdaptationSet标签自带id="0"属性,不能被误提取。
提取目标:
- 仅定位最后一行
<Representation>标签内的id属性值 - 截取该id值前半段的UUID内容,最终提取结果为
ae5e9598-e989-5c57-b996-879085b2c515,并存入批处理变量
批处理原生实现方案
完全依赖批处理内置命令即可完成提取,不需要额外安装第三方工具,核心逻辑分三步:
- 逐行扫描XML内容,直接筛选出包含
<Representation>标签的行,从根源上避开首行id="0"的AdaptationSet标签干扰 - 从匹配到的Representation行中,提取转义格式的
id属性完整值 - 按照id值的固定结构(UUID后拼接
-0_后缀)分割字符串,取出纯UUID部分存入变量
示例代码
@echo off setlocal enabledelayedexpansion :: 替换为实际存储原始XML内容的变量,此处以xml_source代指 set "xml_source=你的原始XML内容" set "final_uuid=" :: 逐行匹配Representation标签行 for /f "delims=" %%line in ("%xml_source%") do ( echo %%line | findstr /c:"<Representation" >nul && ( :: 提取该行中转义格式的id属性完整值 for /f "tokens=2 delims=;" " %%idval in ('echo %%line ^| findstr /o "id=""') do ( :: 按固定分隔符"-0_"切割,取前半段UUID for /f "tokens=1 delims=-0_" %%u in ("%%idval") do ( set "final_uuid=%%u" ) ) ) ) :: 提取结果存入变量final_uuid,可直接调用 echo 提取结果:!final_uuid!
关键说明
- 锚定
<Representation>标签做行筛选,从根本上不会匹配到上层AdaptationSet的id="0"属性,无混淆风险 - 分割规则匹配示例中id值的固定结构:UUID后固定拼接
-0_开头的资源后缀,取该分隔符前的内容即可,不会误伤UUID本身自带的连字符 - 适配原文中引号为
"转义格式的场景,不需要提前做HTML实体转义还原
内容的提问来源于stack exchange,提问作者user8333491
相关产品推荐
相关产品推荐

