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

回复 15# hnfeng

一。楼主自己判断用7楼代码获取的“任务名称”所在的行号正确吗?正确值应该是 %n%-1
二。15楼对应的源文件还是utf-8编码的一楼示例文件吗?
      如果不是,能否如一楼示例样本那样粘贴出来看看,以便测试检查其中的字段位序有否变化...因为我用7楼代码已对utf-8编码的一楼样本测试通过了
      借此也可判断究竟是findstr的性能或用法还是其他问题...

TOP

回复 16# aloha20200628

貌似 没有获取到行号 n
    echo %n%   显示 ECHO is off.

1楼的代码是精简了的,<一些无关字符> 省略掉了,不然太长

TOP

本帖最后由 qixiaobin0715 于 2024-7-8 17:01 编辑

批处理文件保存格式如12楼:
  1. @echo off
  2. chcp 65001>nul
  3. setlocal enabledelayedexpansion
  4. for %%i in (任务名称 同步任务开始时间 开始检查 检查完毕 同步任务结束时间) do (
  5.     set /a n+=1
  6.     set /a _%%i=n
  7. )
  8. for /f "tokens=3,4 delims=><(" %%i in (1.html) do (
  9.     if defined _!str! (
  10.         set /a m=_!str!
  11.         set #!m!=%%i
  12.         if !m! equ 5 (
  13.             for /l %%k in (1,1,5) do echo,!#%%k!
  14.         )
  15.     )
  16.     set str=%%j
  17. )
  18. pause
复制代码
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

本帖最后由 WHY 于 2024-7-8 16:55 编辑

批处理编码为 UTF-8 Without BOM
  1. @echo off
  2. set "reg=^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}"
  3. gawk -b "{if(match($0, />([^<>]+)<\//, a) && match(a[1], /%reg%/, b))c[++i]=b[0]; else if(s==\"任务名称\")s0=a[1]; s=a[1]} END {asort(c); print s0; for(i in c)print c[i]}" 1.html > 1.txt
  4. pause
复制代码

TOP

本帖最后由 aloha20200628 于 2024-7-8 17:06 编辑

回复 17# hnfeng

看来还是要敲打一下 findstr 对utf-8编码文件中的中文数据匹配能力
改用 find 匹配中文数据要比 findstr 强悍,但其代价是没有了正则功能,好在本帖要求的仅是匹配一个中文字面量 ‘任务名称’ 而已 ...
楼主再用以下代码试试,应该可以了...也是对批处采用 findstr/find 的权衡与分寸提供一个第一手的实例
  1. @echo off &chcp 65001>nul &@echo off &set "hF=1.html"
  2. for /f "tokens=1 delims=[]" %%n in ('find /n ">任务名称<" "%hF%"^|more +2') do set/a "n=%%n+1"
  3. (for /f "tokens=4 delims=<>" %%a in (' findstr /n ".*" "%hF%"^|findstr /lbc:"%n%:" ') do echo,%%a)>1.txt
  4. (for /f "tokens=3 delims=<>(" %%a in (
  5. ' findstr /rc:"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" "%hF%" ') do @echo,%%a)|sort>>1.txt
  6. pause&exit/b
复制代码

TOP

本帖最后由 WHY 于 2024-7-8 17:06 编辑

批处理编码为 ANSI
  1. <# :
  2. @echo off
  3. PowerShell ". ([ScriptBlock]::Create((gc -Literal '%~f0') -join \"`r`n\")) '1.html'"
  4. pause & exit
  5. #>
  6. $Hash = @{任务名称=0; 同步任务开始时间=1; 开始检查=2; 检查完毕=3; 同步任务结束时间=4};
  7. $out  = @('', '', '', '', '');
  8. $str  = [IO.File]::ReadAllText($args[0], [Text.Encoding]::UTF8);
  9. forEach ($m In [regex]::Matches($str, '>([^<>]+)</')) {
  10.     If ($s -ne $null -and $Hash.ContainsKey($s)) {
  11.         $n = $Hash[$s];
  12.         $out[$n] = $m.Groups[1].Value;
  13.     }
  14.     $s = $m.Groups[1].Value;
  15. }
  16. $out -replace '\(.*$';
复制代码

TOP

回复 10# hnfeng
  1. gawk "$0 ~ /\xE4\xBB\xBB\xE5\x8A\xA1\xE5\x90\x8D\xE7\xA7\xB0|\xE5\xBC\x80\xE5\xA7\x8B\xE6\xA3\x80\xE6\x9F\xA5|\xE6\xA3\x80\xE6\x9F\xA5\xE5\xAE\x8C\xE6\xAF\x95|\xE5\x90\x8C\xE6\xAD\xA5\xE4\xBB\xBB\xE5\x8A\xA1..\xE6\x97\xB6\xE9\x97\xB4/{(getline);a=$0;gsub(/<[^>]*>/,\"\",a);print a}" 1.html >1.txt
复制代码

TOP

回复 1# hnfeng

最好发文件,方便测试

TOP

批处理文件保存格式如12楼:
qixiaobin0715 发表于 2024-7-8 16:33



    成功成功,多谢多谢

TOP

批处理编码为 ANSI
WHY 发表于 2024-7-8 16:59



    成功成功,多谢多谢了

TOP

谢谢以上各位的帮忙

TOP

谢谢以上各位的帮忙

TOP

回复 18# qixiaobin0715
代码12、13行的数字5可改为!n!,这样更通用一些。

TOP

本帖最后由 aloha20200628 于 2024-7-9 19:56 编辑

回复 27# hnfeng

如果改用 find.exe 匹配utf-8网页中的汉字数据无误,可用以下代码一气呵成,无须用批处逐行遍历整个网页,也免去sort排序...
  1. @echo off &chcp 65001>nul&@echo off &del/q 1.txt 2>nul &set "hF=1.html"
  2. set "kws=任务名称,同步任务开始时间,开始检查,检查完毕,同步任务结束时间"
  3. :[loop]
  4. for /f "tokens=1* delims=," %%a in ("%kws%") do set "kw=%%a"&set "kws=%%b"
  5. for /f "tokens=1 delims=[]" %%n in ('find /n ">%kw%<" "%hF%"^|more +2') do set/a "n=%%n+1"
  6. (for /f "tokens=4 delims=<>(" %%a in (' findstr /n ".*" "%hF%"^|findstr /lbc:"%n%:" ') do echo,%%a)>>1.txt
  7. if "%kws%"=="" (pause&exit/b) else goto[loop]
复制代码

TOP

回复  qixiaobin0715
代码12、13行的数字5可改为!n!,这样更通用一些。
qixiaobin0715 发表于 2024-7-9 08:20



    谢谢谢谢,已经更新

TOP

返回列表