[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]如何使用 gawk.exe 获取html文件中的字符串?

本帖最后由 hnfeng 于 2024-7-9 08:12 编辑

下面代码是 html 文件的一部分
  1. <一些无关字符>
  2. <table width="100%" border="1" cellpadding="5" cellspacing="0" bordercolor="#E3F2FD">
  3. <tr bgcolor="#1565C0"><td colspan="4"><strong><font color="#FFFFFF" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">日志报告:概述</font></strong>
  4. </td></tr>
  5. <tr>
  6. <td bgcolor="#BBDEFB"><strong><font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">任务名称</font></strong></td>
  7. <td width="23%" bgcolor="#FFFFFF"><font size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">2.5_activity_H2J</font></td>
  8. <td bgcolor="#BBDEFB"><font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"><strong>类别</strong></font></td>
  9. <一些无关字符>
  10. </tr>
  11. <tr>
  12. <td bgcolor="#BBDEFB"><strong><font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">开始检查</font></strong></td>
  13. <td width="23%" bgcolor="#FFFFFF"><font size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">2024-07-05 23:14:49</font></td>
  14. <td bgcolor="#BBDEFB"><font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"><strong>检查完毕</strong></font></td>
  15. <td width="39%" bgcolor="#FFFFFF"><font size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">2024-07-06 02:34:51 (3 小时, 20 分钟, 2 秒)</font></td>
  16. </tr>
  17. <tr>
  18. <td bgcolor="#BBDEFB"><strong><font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">同步任务开始时间</font></strong></td>
  19. <td width="23%" bgcolor="#FFFFFF"><font size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">2024-07-05 21:06:08</font></td>
  20. <td bgcolor="#BBDEFB"><font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"><strong>同步任务结束时间</strong></font></td>
  21. <td width="39%" bgcolor="#FFFFFF"><font size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif">2024-07-06 02:44:46 (5 小时, 38 分钟, 37 秒)</font></td>
  22. </tr>
  23. </table>
  24. <一些无关字符>
复制代码
想获取里面的信息:
2.5_activity_H2J
2024-07-05 21:06:08
2024-07-05 23:14:49
2024-07-06 02:34:51
2024-07-06 02:44:46

请教怎样使用 gawk.exe (其他批处理、第三方也可以)获取上面的字符串,存到一个文本文件中。
多谢了

本帖最后由 aloha20200628 于 2024-7-8 08:41 编辑

回复 1# hnfeng

若需更完整的匹配,代码第2行可改为 ‘日期+时间’ 两个字段的正则式》
   "[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
  1. @echo off & (for /f "tokens=3 delims=<>(" %%a in (
  2.       'findstr /ic:"_activity_" /rc:"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" 1.html') do echo,%%a)>1.tmp
  3. sort 1.tmp>1.txt
  4. del "1.tmp"&pause&exit/b
复制代码

TOP

本帖最后由 hnfeng 于 2024-7-8 07:34 编辑

回复 2# aloha20200628


    哦,不好意思,我没有说清楚,我的意思是 按顺序 获取 任务名称各个时间
任务名称
2.5_activity_H2J
同步任务开始时间
2024-07-05 21:06:08
开始检查
2024-07-05 23:14:49
检查完毕
2024-07-06 02:34:51
同步任务结束时间
2024-07-06 02:44:46

但是输出结果只要任务名称和各个时间

TOP

回复 3# hnfeng

2楼代码已订正,加个排序就可以了

TOP

回复 3# hnfeng

不用临时文件的版本...
  1. @echo off & (for /f "tokens=3 delims=<>(" %%a in (
  2.       'findstr /ic:"_activity_" /rc:"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" 1.html') do @echo,%%a)|sort>1.txt
  3. pause&exit/b
复制代码

TOP

回复  hnfeng

不用临时文件的版本...
aloha20200628 发表于 2024-7-8 09:39



    谢谢帮忙,这个 sort 很巧妙

不过,html 文件中的 任务名称 可能是其他的 不含 _activity 的字符串,貌似也没明显的共有字符串可 findstr,所以能否再改改,通用一点(html格式是一样的)

主要是 任务名称 不同。就是找到文字 任务名称 ,然后取下一行的 非代码字符的文字

TOP

本帖最后由 aloha20200628 于 2024-7-8 13:39 编辑

回复 6# hnfeng

因为要先提取 ‘任务名称’ 这个中文字段,故须确认1.html的编码,以下代码假设其为系统默认编码(936 即 gb2312);
若1.html是utf-8编码,则须抹去代码第2行首的::注释前缀,还须将代码脚本存为utf-8编码后运行...
  1. @echo off &set "hF=1.html"
  2. ::chcp 65001>nul & @echo off
  3. for /f "tokens=1 delims=:" %%n in (' findstr /lnc:">任务名称<" "%hF%" ') do set/a "n=%%n+1"
  4. (for /f "tokens=4 delims=<>" %%a in (' findstr /n ".*" "%hF%"^|findstr /lbc:"%n%:" ') do echo,%%a)>1.txt
  5. (for /f "tokens=3 delims=<>(" %%a in (
  6. ' findstr /rc:"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" "%hF%" ') do @echo,%%a)|sort>>1.txt
  7. pause&exit/b
复制代码

TOP

不知行否
注意html的编码
  1. gawk "$0 ~ /任务名称|开始检查|检查完毕|同步任务..时间/{(getline);a=$0;gsub(/<[^>]*>/,\"\",a);print a}" 1.html >1.txt
复制代码

TOP

回复  hnfeng

因为要先提取 ‘任务名称’ 这个中文字段,故须确认1.html的编码,以下代码假设其为系统默 ...
aloha20200628 发表于 2024-7-8 12:59



    不成功,编码是 UTF-8,已经按你说的第二行删掉前面的两个冒号,以及保存批处理文件为 UTF-8 (是否有 BOM 都试了)

TOP

不知行否
注意html的编码
Five66 发表于 2024-7-8 13:07



    不成功,编码是 UTF-8

TOP

回复 9# hnfeng

在7楼代码中3-4行之间加入 echo,%n% 检查获取目标行号是否正确?
再粘贴看看生成的 1.txt 究竟啥样?

TOP

本帖最后由 77七 于 2024-7-8 14:57 编辑

楼主文件为utf-8,以下代码保存为utf-8。
  1. @echo off
  2. chcp 65001 >nul
  3. cd /d "%~dp0"
  4. set str="任务名称" "同步任务开始时间" "开始检查" "检查完毕" "同步任务结束时间"
  5. for %%a in (%str%) do (
  6. set _"%%~a"=1
  7. )
  8. setlocal enabledelayedexpansion
  9. for /f "useback tokens=3,4 delims=<>(" %%a in ("1.xml") do (
  10. if defined _"%%b" (
  11. set b=%%b
  12. ) else if defined b (
  13. call set "str=%%str:"!b!"="!b!" "%%a"%%"
  14. set b=
  15. )
  16. for %%a in (!str!) do (
  17. set /a n+=1
  18. )
  19. if !n! equ 10 (
  20. for %%a in (!str!) do (
  21. echo %%~a
  22. endlocal
  23. setlocal enabledelayedexpansion
  24. )
  25. )
  26. set n=
  27. )
  28. endlocal
  29. pause
复制代码


部分命令顺序写错了,不过不影响结果。第22-23行可写到原24行下,这样逻辑清晰点。
bat小白,请多指教!谢谢!

TOP

回复 12# 77七


一些多余了
   21行改为
  1. if not defined _"%%~a" echo %%~a
复制代码
bat小白,请多指教!谢谢!

TOP

回复  77七


一些多余了
   21行改为
77七 发表于 2024-7-8 14:08



    成功成功,多谢了

TOP

回复 11# aloha20200628
  1. 10.0.19045)  
  2. 10.0.19045)  
  3. 2024-07-05 21:06:08
  4. 2024-07-05 23:14:49
  5. 2024-07-06 02:34:51  
  6. 2024-07-06 02:44:46  
  7. FastMM.Normal)  
  8. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  9. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  10. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  11. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  12. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  13. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  14. font color="#000077" size="3" face="Segoe UI Variable, Segoe UI, Verdana, sans-serif"
  15. TM) i5~13400  
  16. x86)
  17. x86)\AOMEI\AOMEI Backupper\7.3.2;
  18. x86)\Common Files
  19. xxxxxxxxxxxx)
  20. 成功)
  21. 成功)
  22. 成功)
  23. 成功)
  24. 成功)
  25. 成功)
  26. 成功)
复制代码

TOP

返回列表