使用批处理脚本提取HTML中<a>标签的href值与文本内容
Batch脚本提取HTML链接的href值与标签文本
可行代码
@echo off setlocal enabledelayedexpansion :: 遍历findstr筛选出的目标行 for /f "delims=" %%a in ('findstr /r "<a href=\"\"\"\">\"\"</a>" file.html') do ( set "line=%%a" :: 将所有双引号替换为竖线,消除引号对for/f的干扰 set "line=!line:"=|!" :: 拆分处理后的行,提取目标内容 for /f "tokens=3,5 delims=<>=|" %%b in ("!line!") do ( echo URL: %%b echo 文本: %%c echo ------------------------ ) ) endlocal
详细解释
核心思路
通过字符串替换消除引号干扰,再用for /f的分隔符拆分功能提取目标内容,完全避开正则解析的复杂操作。
逐行拆解
@echo off:关闭命令回显,让输出更干净。setlocal enabledelayedexpansion:启用延迟变量扩展,确保在for循环内部修改和读取变量时能获取实时值。- 外层
for /f循环:"delims=":保留整行内容,防止默认的空格/制表符截断行数据。findstr /r "<a href=\"\"\"\">\"\"</a>" file.html:用findstr的简单正则匹配目标行,这里的\"\"\"是Batch中在单引号命令里转义双引号的写法,确保精准匹配<a href="...">...</a>格式的行。
set "line=%%a":将当前遍历到的行存入变量line。set "line=!line:"=|!":把行内所有双引号替换为竖线|——这是解决你引号报错问题的关键,将特殊转义字符转为普通分隔符,避免for /f解析时出错。- 内层
for /f循环:"tokens=3,5 delims=<>=|":指定<、>、=、|为分隔符,提取拆分后的第3、5个片段。- 替换后的行格式示例:
<a href=|https://example.com|>|示例链接|</a>,拆分后第3段是href值,第5段是标签文本。
- 替换后的行格式示例:
- 最后输出提取结果,用分隔线区分每条记录。
适配调整
如果HTML行存在格式差异(比如href和=之间有空格),只需将空格加入分隔符即可:delims=<>=| ;若行内有额外属性,需根据实际结构调整tokens的序号。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

