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

[文本处理] 【已解决】批处理怎样从txt文本或者htm文件里提取特定内容?

[复制链接]
发表于 2014-11-2 23:35:27 | 显示全部楼层 |阅读模式
例如: <div><a href="Detail.mvc?sys=dlib&amp;type=1&amp;restype=2&amp;cult=CN&amp;resid=m.20140704-ZLZX-889-0379&amp;page=1" onclick="WriteCenterLogs(*m.20140704-ZLZX-889-0379*,*社会风尚与道德领域突出问题专项治理研究:基于文化视角的透析*,*高褔进, 闫成*,*上海人民出版社*,*2014*,*APABI_XKFL$$063,其他学科;CYFL2011$$009006,政治军事|中国政治;XXKC$$005003,课外阅读|社会科学类;ZXKC$$006003,课外阅读|社会科学类*,*978-7-208-12002-0*);" target="_blank">1</a></div>

这个我网页保存htm里的一段代码。有n个这样的htm,每个htm里有n个这样的一段代码,我想把n个这样的htm里所有这样的代码,批量转换成一个txt文本或excle里。附图,是我想要的格式,请高手大侠帮忙!!做成批处理或者vba代码都可以的!!先谢谢各位了!!

这个图是一个htm里应该提取的的内容,每个htm里有10个!!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-11-3 09:27:46 | 显示全部楼层
最好打包几个htm文件发上来
 楼主| 发表于 2014-11-3 09:46:37 | 显示全部楼层
回复
好的,我发几个htm您试试!!谢谢!

2#
522235677
,还有些这样不同的格式的htm,
 楼主| 发表于 2014-11-4 16:06:24 | 显示全部楼层
请大神们帮忙!!谢谢了!!
发表于 2014-11-4 22:53:47 | 显示全部楼层
本帖最后由 terse 于 2014-11-6 12:28 编辑

最后结果正确不
我这里测 是可行的 (XP 和 WIN7)
  1. @if(0)==(0) echo off
  2. for %%a in (*.htm) do CScript.exe //NoLogo //E:JScript "%~f0" "%%a">%%~na.txt
  3. pause & exit
  4. @end
  5. function WriteCenterLogs(a,b,c,d,e,f,g,h,i) {WScript.Echo(a + '\t' + b + '\t' + c + '\t' + d + '\t' + e+ '\t' + g)}

  6. function adoLoadText(filename, charset) {
  7.     var stream, text;
  8.     stream = new ActiveXObject("ADODB.Stream");
  9.     stream.type = 2;
  10.     stream.charset = charset;
  11.     stream.open();
  12.     stream.loadFromFile(filename);
  13.     text = stream.readText(-1);
  14.     stream.close();
  15.     return text;
  16. }

  17.     var file = WScript.Arguments.Item(0);
  18.     var next = adoLoadText(file ,'UTF-8');
  19.     var html = new ActiveXObject("htmlfile");
  20.     html.write(next);
  21.     var d = html.getElementsByTagName("dd");
  22.     var len = d.length;
  23.     for (var i = 0; i < len; i++) {
  24.        var s = d[i].getElementsByTagName("div");
  25.        s = s[0].getElementsByTagName('a')[0].onclick;
  26.        s();
  27.     }
复制代码
废了对象 还是直接正则获取 这样试下
发现正则有点问题
  1. @if(0)==(0) echo off
  2. dir /b *.htm | CScript.exe //NoLogo //E:JScript "%~f0"
  3. pause & exit
  4. @end

  5. function adoLoadText(filename, charset) {
  6.     var stream, text;
  7.     stream = new ActiveXObject("ADODB.Stream");
  8.     stream.type = 2;
  9.     stream.charset = charset;
  10.     stream.open();
  11.     stream.loadFromFile(filename);
  12.     text = stream.readText();
  13.     stream.close();
  14.     return text;
  15. }
  16. var fso = new ActiveXObject("Scripting.FileSystemObject");
  17. var re = new RegExp('<dd>[^(]+\\((.+)\\);" target=','img')
  18. while (!WScript.StdIn.AtEndOfStream){
  19.     var file = WScript.StdIn.Readline();
  20.     var name = file.replace(/(.+?)(\.[^\.]*?)$/gi,'$1.txt');
  21.     var next = adoLoadText(file ,'UTF-8');
  22.     var arr = getarr(next);
  23.     fso.CreateTextFile(name, true).Write(arr.join('\r\n'))
  24. }

  25. function getarr(next) {
  26.     var f = next.match(re),arr = [];
  27.     if (f){
  28.       var len = f.length;
  29.       for (var i = 0; i < len; i++){
  30.         var str = f[i];
  31.         str = str.replace(re,'$1');
  32.         var tar = str.replace(/^'|'$/g,'').replace(/\t/g,' ').split(/','/);
  33.         tar.splice(5, 1)
  34.         arr[i] = tar.join('\t')
  35.       }
  36.       return arr;
  37.     }
  38. }
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2014-11-5 06:11:13 | 显示全部楼层
回复 5# terse

代码 加个注释 新手好学习啊 晕
 楼主| 发表于 2014-11-5 07:30:43 | 显示全部楼层
本帖最后由 tbjx138 于 2014-11-5 07:37 编辑

回复 5# terse

感谢您的回复,我用您给的代码测试了2个htm,提取的txt是0kb,没用任何信息?不知道原因在哪!是不是我用的不对呢,我是用您的代码做个bat,放到htm文件夹里操作的。您如果您能加个注释就好了!!
您用我发的附件里htm,测试一下,是不是也和我一样的情况。再次感谢您的帮忙!!
发表于 2014-11-6 02:08:05 | 显示全部楼层
回复 7# tbjx138
上面代码 试下
 楼主| 发表于 2014-11-6 07:42:23 | 显示全部楼层
最后结果正确不
我这里测 是可行的 (XP 和 WIN7)废了对象 还是直接正则获取 这样试下
terse 发表于 2014-11-4 22:53

太感谢terse大神的帮忙了!!完美提取出来了,您的技术非常棒!!批处理真是很强大!!以后还要和大神多学习!!
发表于 2014-11-27 08:24:43 | 显示全部楼层
回复 6# ads350668398


    哪里不懂就直接问吧
发表于 2016-9-30 05:11:19 | 显示全部楼层
回复 10# Batcher

正则经过三周的折腾,算是凑合能搞出想要的东西了。
RegexBuddy4.6 也被我去除校验和NAG,汉化成功了,控件上都被写上了正则例子了,用起来太爽了
就是不会用命令行,要学哪些才能结合使用呢???
发表于 2016-10-1 11:12:20 | 显示全部楼层
回复 11# 我来了


    每天坚持使用支持正则的命令(sed/awk/grep等)到各个技术论坛解决文本处理类的问题

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 17:07 , Processed in 0.021501 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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