如何通过批处理程序读取XML文件并提取指定游戏的ESRB评级
批处理读取XML提取ESRB评级方案
没问题,我来帮你搞定这个批处理读取XML提取ESRB评级的需求!因为批处理本身对XML的原生支持很有限,咱们就用字符串匹配+文本处理的方式来实现,下面是具体的方案:
解决方案代码
假设你的XML结构大概是这样的(如果实际结构不同,后面可以调整匹配逻辑):
T (Teen)
对应的批处理代码如下:
@echo off setlocal enabledelayedexpansion :: 设置目标游戏名称 set "targetGame=007 - Everything or Nothing (USA)" :: 设置你的XML文件路径 set "xmlFile=your_games.xml" :: 初始化评级变量 set "esrbRating=" :: 找到包含目标游戏标题的行并获取行号 for /f "tokens=1 delims=:" %%n in ('findstr /n /C:"%targetGame%" "%xmlFile%"') do ( :: 根据XML结构调整ESRB行的偏移量(这里假设ESRB在游戏行的下一行) set /a esrbLine=%%n + 1 :: 读取ESRB所在行的内容 for /f "skip=!esrbLine! tokens=*" %%b in ('type "%xmlFile%"') do ( :: 提取<esrb>标签内的内容 set "temp=%%b" set "temp=!temp:*<esrb>=!" set "temp=!temp:</esrb>=!" :: 去除内容前后的空格 for /f "tokens=*" %%c in ("!temp!") do set "esrbRating=%%c" :: 找到后跳出循环,避免处理多余行 goto :done ) ) :done :: 输出结果或使用变量 if defined esrbRating ( echo 目标游戏的ESRB评级:*%esrbRating%* :: 这里可以直接用%esrbRating%变量做后续操作 ) else ( echo 未找到目标游戏的ESRB评级信息 ) endlocal
代码说明
- 启用
enabledelayedexpansion(延迟扩展)是为了在循环内部动态修改变量值,这是批处理循环里处理变量的常用技巧。 findstr /n用来给每行添加行号,方便定位目标游戏对应的ESRB行位置,你需要根据自己XML的实际结构调整esrbLine的偏移量(比如如果ESRB和游戏标题在同一行,就把+1去掉)。- 通过两次字符串替换
!temp:*<esrb>=!和!temp:</esrb>=!去掉标签,只保留中间的评级内容,最后用for /f "tokens=*"去除内容前后的空格,得到干净的评级值。 - 如果你的XML结构更复杂(比如标签嵌套更深、属性位置不同),可以调整
findstr的匹配参数或者字符串替换的逻辑来适配。
内容的提问来源于stack exchange,提问作者DKalsow
相关产品推荐
相关产品推荐

