如何用批处理从HTML提取Steam创意工坊ID并生成指定格式字符串
需求与解决方案
原本通过手动维护list.txt中的ID列表,再用批处理脚本list.bat生成c:\server\ID;拼接的长字符串。现需改为解析list.html,从其中的Steam创意工坊链接提取ID,生成相同格式的字符串。
原实现参考
list.txt内容
450814997 463939057
原list.bat脚本
set "my_directory=c:\server" set "list=" for /F "tokens=*" %%A IN ('Type "list.txt"') do ( set "list=!list!%my_directory%\%%A;" ) echo %list%
list.html内容
<body> <div class="mod-list"> <table> <tr data-type="ModContainer"> <td data-type="DisplayName">CBA_A3</td> <td> <span class="from-steam">Steam</span> </td> <td> <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=450814997" data-type="Link">https://steamcommunity.com/sharedfiles/filedetails/?id=450814997</a> </td> </tr> <tr data-type="ModContainer"> <td data-type="DisplayName">ace</td> <td> <span class="from-steam">Steam</span> </td> <td> <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=463939057" data-type="Link">https://steamcommunity.com/sharedfiles/filedetails/?id=463939057</a> </td> </tr> </table> </div> <div class="dlc-list"> <table /> </div> <div class="footer"> <span>Created by Arma 3 Launcher by Bohemia Interactive.</span> </div> </body>
修改后的批处理脚本
@echo off setlocal enabledelayedexpansion set "my_directory=c:\server" set "list=" for /F "tokens=* delims=" %%L in (list.html) do ( set "line=%%L" :: 匹配包含?id=的行,提取后面的数字ID echo !line! | findstr /i "id=" >nul if not errorlevel 1 ( set "id_part=!line:*?id=!" for /F "tokens=1 delims=&\" %%I in ("!id_part!") do ( set "list=!list!!my_directory!\%%I;" ) ) ) echo !list! endlocal
脚本说明
- 启用延迟扩展:
setlocal enabledelayedexpansion,确保循环中变量修改能实时生效。 - 遍历HTML每一行:
for /F读取list.html的每一行内容。 - 筛选含ID的行:用
findstr检查行中是否包含id=,只处理这类行。 - 提取ID:通过字符串替换
!line:*?id=!截取?id=之后的内容,再用for /F以&或\为分隔符取第一部分,得到纯数字ID。 - 拼接字符串:将
my_directory\ID;追加到list变量中,最后输出结果。
预期输出
c:\server\450814997;c:\server\463939057;
内容的提问来源于stack exchange,提问作者Ing. Michal Hudak
相关产品推荐
相关产品推荐

