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

[文本处理] [已解决]批处理如何从html格式(接收到的邮件)中读取数据

本帖最后由 dimo 于 2022-12-30 19:31 编辑

通过第三方批处理getmail可以获取到邮箱里的邮件。获取后经其自身解码,得到一个Extract*.out文件,大致看一下其格式应该为html的写法,并且内容只分一行。
  1. <div dir="auto">here is the content</div>
复制代码
显然我邮件发送的原内容为:
here is the content

现在要提取出其中的原内容并且将所有内容合并到一行。问题在于,邮箱不一定每次都接收到这样简单的文件。例如内容当中出现换行:
  1. <div dir="auto">abababababababab<br /><br />abababababababab<br /><br /></div>
复制代码
有时内容含特殊字符,解码之后也无法正常显示(某些字符):
i wanna get these words # $ % & * @ ? !
  1. <div dir="auto">i wanna get these words # $ % &amp; * &#64; ? !</div>
复制代码
有时发送的内容经过复制粘贴,不小心留下了其他信息:
  1. <div dir="auto">hey get it <span style="font-family:sans-serif">hey get it </span><br style="font-family:sans-serif" /><span style="font-family:sans-serif">hey get it </span><span style="font-family:sans-serif">hey get it </span><br style="font-family:sans-serif" /></div>
复制代码
显然需要忽略<>标签里的所有内容才能得到原内容,并且需要还原未正常显示的符号。
可能要用到第三方了……
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. powershell "([xml](gc Extract.out)).InnerText"
复制代码

TOP

回复 2# idwma


   赞一个

QQ 20147578

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 dimo 于 2022-12-30 19:47 编辑

回复 2# idwma

不过2楼这个好像不太好用……是我用错了?
回复 4# Batcher
HTML2TXT好用,可以正确解析并且支持中文,虽然帮助界面会乱码。
dehtml也可以解析,不支持中文。
我还试了html2text,那个已经用不了了。一调用就会在后台开n多进程,最后跳出一个应用程序无法正常启动。

TOP

回复 5# dimo


请把你测试2楼代码使用的数据和结果发出来看看,具体是怎么个好像。
如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @if(0)==(0) echo off
  2. type Extract.out | cscript //nologo //e:jscript "%~f0"
  3. pause & exit
  4. @end
  5. var html = new ActiveXObject('htmlfile');
  6. html.write(WSH.StdIn.ReadAll());
  7. var s = html.getElementsByTagName('div')[0].innerText;
  8. WSH.Echo(s);
复制代码

TOP

本帖最后由 dimo 于 2022-12-31 14:46 编辑

回复 2# idwma
回复 6# Batcher
我试过保存在批处理文件里运行,在cmd窗口中运行,都不好用。
没有回显。什么都没有。 下面这里有一张图片:

还有就是,链接的那两个图床都是网页无法打开。

TOP

回复 7# WHY
大多数情况下可用。但是在处理原帖最后一串字符时出问题。得到的回显:
  1. hey get it聽hey get it聽
  2. hey get it聽hey get it聽
  3. 请按任意键继续. . .
复制代码
如果删去it后面的空格则不会出现乱码。(所给字符串的空格和电脑输入的空格有不同)

TOP

回复 8# dimo
  1. powershell "([xml](gc Extract.out)).FirstChild.InnerText"
复制代码
1

评分人数

TOP

回复 9# dimo


    你应该提供一个真实的样本以便测试
1楼那么长的描述,唯独不见样本。
那个空格是UTF-8编码中的一种空格,名称:Non-breaking space,编码:0xC2A0,与常规空格(\x20)不同。

cmd显示乱码不要紧,重定向到文件就行了。就看你会不会加重定向。

如果嫌显示实在是扎眼,可以这样:
  1. @if(0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0"
  3. pause & exit
  4. @end
  5. function getText(file, charset){
  6.     var ado = new ActiveXObject('ADODB.Stream');
  7.     ado.Type = 2;
  8.     ado.CharSet = charset;
  9.     ado.Open();
  10.     ado.LoadFromFile(file);
  11.     var text = ado.ReadText(-1);
  12.     ado.Close();
  13.     return text;
  14. }
  15. var text = getText('Extract.out', 'utf-8');
  16. var html = new ActiveXObject('htmlfile');
  17. html.write(text);
  18. var s = html.getElementsByTagName('div')[0].innerText;
  19. WSH.Echo(s);
复制代码
1

评分人数

TOP

本帖最后由 dimo 于 2023-2-8 01:31 编辑

回复 10# idwma
经过多次可靠性测试,这个是最优解法

TOP

回复 11# WHY
1楼我也说了,Extract.out文件就只一行。新建一个txt把我提供的内容复制进去(保存确实是用的utf8),就和实际得到的样本是一模一样的。
不过我测试是没有问题了。当初这个输出的内容还要用for处理什么的,所以不能有乱码。现在已经能运行了。

TOP

返回列表