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


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

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

回复 9# hnfeng

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

TOP

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



    不成功,编码是 UTF-8

TOP

回复  hnfeng

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



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

TOP

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

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

回复  hnfeng

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



    谢谢帮忙,这个 sort 很巧妙

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

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

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

回复 3# hnfeng

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

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

本帖最后由 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

返回列表