找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19373|回复: 9

[文本处理] 指定文件夹中的XML内查找内容,显示查找到的内容后面8个字符。

[复制链接]
发表于 2022-11-14 15:52:48 | 显示全部楼层 |阅读模式
需求:1、在固定路径C:\oud\traces下的AC、ADS、AP三个文件夹内寻找最新时间创建的文件夹。
         2、在最新时间创建的文件夹下查找XML文件里所包含的字符"3101DF05”。提取后面的8个字符。
         3、把提取出来的8个字符(16进制)转换进制为字符串并复制出来。任何文本文档或程序内可以直接粘贴使用。
发表于 2022-11-14 16:03:37 | 显示全部楼层

  1. gawk "/3101DF05.{8}/{print gensub(/^.*3101DF05(.{8}).*$/,"\\1","g")}" input.xml>output.txt
复制代码
 楼主| 发表于 2022-11-14 16:08:31 | 显示全部楼层
hfxiang 发表于 2022-11-14 16:03



    怎么用ECHO显示所输出的数据3101DF05........
发表于 2022-11-14 16:11:36 | 显示全部楼层

  1. for /f %%a in ('gawk "/3101DF05.{8}/{print gensub(/^.*3101DF05(.{8}).*$/,"\\1","g")}" input.xml') do echo %%a
复制代码
发表于 2022-11-14 17:07:04 | 显示全部楼层
 楼主| 发表于 2022-11-14 17:14:26 | 显示全部楼层
LZ请看最新回复》
aloha20200628 发表于 2022-11-14 17:07
  1. @set @n=0;WScript.Echo(eval('String.fromCharCode('+WScript.Arguments(0).replace(/(..)/g,"0x$1,")+'"")'));/*
  2. @echo off
  3. set /p "hex=请输入数据:"
  4. for /f "delims=" %%Y in ('cscript -nologo -e:jscript "%~0" %hex%') do set "bin=%%Y"
  5. ECHO 您的密码为:%bin%
  6. pause */
复制代码
以上16进制转换成字符串代码没办法串进去 (3101DF05后面的8个字符)
发表于 2022-11-14 17:54:24 | 显示全部楼层
还是重新粘贴一下在“批处理如何在XML内查找内容,显示查找到的内容及后面8个字符”旧帖中的最后回复吧...
如下》
刚下载了lz的样本文件,才知其中‘给CMD埋了个大坑’,目标字段‘3101DF05...’所在行的字符量=70680,远超过纯P单个变量的上限(8k),for (...) 和 set ... 根本扛不住findstr的返回值。如此本贴须请其他脚本代劳了。
再给一个cmd+cscript@js混编代码》
还是先用 dir /s/b/a-d/o-d/tw 获取指定目录下最新创建或修改的目标文件

  1. @set @v=1 /*
  2. @echo off
  3. (dir/s/b/a-d/o-d/tw C:\oud\traces\*.xml)>tmp.txt&(set/p inF=<tmp.txt)&(del/q tmp.txt)
  4. for /f "delims=" %%v in ('cscript /e:jscript "%~f0" "%inF%" ') do echo,%%v
  5. exit/b
  6. */
  7.     var v = WSH.Arguments;
  8.     var fso = new ActiveXObject('scripting.filesystemobject');
  9.     var fp = fso.opentextfile(v(0));
  10.     var alllines = fp.readall(); fp.Close();
  11.     alllines = alllines.replace(/[\r\n]/g, '');
  12.     var kwF = alllines.replace(/.*(3101DF05.{8}).*/gi, '$1');
  13.     WSH.Echo(kwF);
复制代码
发表于 2022-11-14 18:49:33 | 显示全部楼层
以下脚本保存为OUD.VBS,放在C:\oud\traces,在命令行输入
  1. CSCRIPT OUD.VBS
复制代码
来运行。运行结果示例:
  1. Microsoft (R) Windows Script Host Version 5.8
  2. 版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。

  3. 31323334
复制代码
代码:
  1. FUNCTION MRF192(FD4, DATE4, FN4) ' MOST RECENT FOLDER
  2.         DIM F1, FSO

  3.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  4.         FOR EACH F1 IN FSO.GETFOLDER(FD4).SUBFOLDERS
  5.                 IF F1.DATECREATED > DATE4 THEN
  6.                         DATE4 = F1.DATECREATED
  7.                         SET FN4 = F1
  8.                 END IF
  9.         NEXT
  10.        
  11.         SET MRF192 = FN4
  12. END FUNCTION


  13. FUNCTION GETMRF
  14.         DIM FSO, F, FC, FD4
  15.         DIM MRF925V ' MOST RECENT FOLDER
  16.        
  17.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  18.         SET MRF925V = MRF192("AC", DATESERIAL(1970, 1, 1), NOTHING)
  19.         SET MRF925V = MRF192("ADS", MRF925V.DATECREATED, MRF925V)
  20.         SET MRF925V = MRF192("AP", MRF925V.DATECREATED, MRF925V)
  21.         SET GETMRF = MRF925V
  22. END FUNCTION


  23. SUB FINDXML28(OUT207)
  24.         DIM MRF925V, CMD329, WSH329
  25.        
  26.         SET WSH329 = CREATEOBJECT("WSCRIPT.SHELL")
  27.         SET MRF925V = GETMRF
  28.        
  29.         CMD329 = "CMD /C FINDSTR /S /M 3101DF05 """ & MRF925V.PATH & "\*.xml"" > " & OUT207
  30.         WSH329.RUN CMD329, 10, TRUE
  31. END SUB


  32. FUNCTION READ4UTF8(FPATH)
  33.     DIM ADOS
  34.     SET ADOS = CREATEOBJECT("ADODB.STREAM")
  35.      
  36.     WITH ADOS
  37.         .CHARSET = "UTF-8"
  38.         .TYPE = 2
  39.         .OPEN
  40.         .LOADFROMFILE FPATH
  41.         READ4UTF8 = .READTEXT
  42.         .CLOSE
  43.     END WITH
  44.     SET ADOS = NOTHING
  45. END FUNCTION


  46. SUB FINDHEX46(LINE40)
  47.         DIM REGEX, MATCH, MATCHES
  48.         SET REGEX = NEW REGEXP
  49.         REGEX.PATTERN = "3101DF05(........)"
  50.         SET MATCHES = REGEX.EXECUTE(READ4UTF8(LINE40))
  51.         WSCRIPT.ECHO MATCHES(0).SUBMATCHES(0)
  52. END SUB


  53. SUB FINDHEXS(OUT207)
  54.         DIM FSO, TS
  55.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  56.         SET TS = FSO.OPENTEXTFILE(OUT207, 1, FALSE, TRISTATETRUE)
  57.        
  58.         DO UNTIL TS.ATENDOFSTREAM
  59.                 FINDHEX46 TS.READLINE
  60.         LOOP
  61.        
  62.         TS.CLOSE
  63. END SUB

  64. SUB MAIN4
  65.         DIM OUT207
  66.        
  67.         OUT207 = "OUDTMP12421.TXT"
  68.         FINDXML28 OUT207
  69.         FINDHEXS OUT207
  70. END SUB

  71. MAIN4
复制代码
 楼主| 发表于 2022-11-14 19:29:46 | 显示全部楼层
以下脚本保存为OUD.VBS,放在C:\oud\traces,在命令行输入来运行。运行结果示例:代码:
BAT221110 发表于 2022-11-14 18:49
  1. Microsoft Windows [版本 10.0.19045.2251]
  2. (c) Microsoft Corporation。保留所有权利。

  3. C:\Windows\system32>cd C:\oud\traces

  4. C:\oud\traces>CSCRIPT oud.vbs
  5. Microsoft (R) Windows Script Host Version 5.812
  6. 版权所有(C) Microsoft Corporation。保留所有权利。

  7. C:\oud\traces\oud.vbs(5, 2) Microsoft VBScript 运行时错误: 路径未找到


  8. C:\oud\traces>
复制代码
哈哈。。。
发表于 2022-11-14 20:29:00 | 显示全部楼层
5.1版
  1. SUB DEBUGPRINT819(S)
  2.         'WSCRIPT.ECHO "[DEBUG] " & S
  3. END SUB


  4. FUNCTION DATECREATED821(X) ' DATECREATED OR NOTHING
  5.         IF X IS NOTHING THEN
  6.                 DATECREATED821 = DATESERIAL(1970, 1, 1)
  7.         ELSE
  8.                 DATECREATED821 = X.DATECREATED
  9.         END IF
  10. END FUNCTION


  11. FUNCTION MRF192(FD4, FN4) ' MOST RECENT FOLDER
  12.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  13.         IF FSO.FOLDEREXISTS(FD4) THEN
  14.                 DEBUGPRINT819 "READ FOLDER " & FD4
  15.                 DATE4 = DATECREATED821(FN4)
  16.                 FOR EACH F1 IN FSO.GETFOLDER(FD4).SUBFOLDERS
  17.                         IF F1.DATECREATED > DATE4 THEN
  18.                                 DATE4 = F1.DATECREATED
  19.                                 SET FN4 = F1
  20.                         END IF
  21.                 NEXT
  22.         END IF       
  23.        
  24.         SET MRF192 = FN4
  25. END FUNCTION


  26. FUNCTION GETMRF
  27.         DIM FSO, F, FC, FD4
  28.         DIM MRF925V ' MOST RECENT FOLDER
  29.        
  30.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  31.         SET MRF925V = NOTHING
  32.         SET MRF925V = MRF192("AC", MRF925V)
  33.         SET MRF925V = MRF192("ADS", MRF925V)
  34.         SET MRF925V = MRF192("AP", MRF925V)
  35.         SET GETMRF = MRF925V
  36. END FUNCTION


  37. SUB FINDXML28(OUT207)
  38.         DIM MRF925V, CMD329, WSH329
  39.        
  40.         SET WSH329 = CREATEOBJECT("WSCRIPT.SHELL")
  41.         SET MRF925V = GETMRF
  42.        
  43.         CMD329 = "CMD /C FINDSTR /S /M 3101DF05 """ & MRF925V.PATH & "\*.xml"" > " & OUT207
  44.         WSH329.RUN CMD329, 10, TRUE
  45. END SUB


  46. FUNCTION READ4UTF8(FPATH)
  47.     DIM ADOS
  48.     SET ADOS = CREATEOBJECT("ADODB.STREAM")
  49.      
  50.     WITH ADOS
  51.         .CHARSET = "UTF-8"
  52.         .TYPE = 2
  53.         .OPEN
  54.         .LOADFROMFILE FPATH
  55.         READ4UTF8 = .READTEXT
  56.         .CLOSE
  57.     END WITH
  58.     SET ADOS = NOTHING
  59. END FUNCTION


  60. FUNCTION HEX2INT701(X)
  61.         HEX2INT701 = EVAL("&H" & X)
  62. END FUNCTION


  63. FUNCTION HEX2STR75(X)
  64.         S768 = ""
  65.        
  66.         FOR I = 1 TO LEN(X) / 2
  67.                 I798 = HEX2INT701(MID(X, I*2 - 1, 2))
  68.                 S768 = S768 & CHR(I798)
  69.         NEXT
  70.        
  71.         HEX2STR75 = S768
  72. END FUNCTION


  73. SUB FINDHEX46(LINE40)
  74.         DIM REGEX, MATCH, MATCHES
  75.         SET REGEX = NEW REGEXP
  76.         REGEX.PATTERN = "3101DF05(........)"
  77.         SET MATCHES = REGEX.EXECUTE(READ4UTF8(LINE40))
  78.         WSCRIPT.ECHO HEX2STR75(MATCHES(0).SUBMATCHES(0))
  79. END SUB


  80. SUB FINDHEXS(OUT207)
  81.         DIM FSO, TS
  82.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  83.         SET TS = FSO.OPENTEXTFILE(OUT207, 1, FALSE, TRISTATETRUE)
  84.        
  85.         DO UNTIL TS.ATENDOFSTREAM
  86.                 FINDHEX46 TS.READLINE
  87.         LOOP
  88.        
  89.         TS.CLOSE
  90. END SUB


  91. SUB RMFILE109(X)
  92.         SET FSO = CREATEOBJECT("SCRIPTING.FILESYSTEMOBJECT")
  93.         FSO.DELETEFILE(X)
  94. END SUB


  95. SUB MAIN4
  96.         OUT207 = "OUDTMP12421.TXT"
  97.         FINDXML28 OUT207
  98.         FINDHEXS OUT207
  99.         RMFILE109 OUT207
  100. END SUB

  101. MAIN4
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 10:49 , Processed in 0.023375 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表