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

【已解决】保留微信聊天记录中每个人最新的消息

本帖最后由 末夏未至 于 2018-6-16 22:38 编辑

具体报酬:50元人民币
支付方式:微信转账
联系方式:QQ:908580277
有效期限:2018年6月18日之前。
需求描述:

http://www.bathome.net/viewthrea ... mp;extra=#pid209171
成功后付费50元,谢谢!

备注,由于一开始是免费求助,已有网友“WHY”回复,但不能实现,公平起见也尊重知识产权,若“WHY”回帖了,他的程序能实现,报酬给与“WHY”。
希望大家用自己的实现方式,另外,本人不会配置环境,只用过简单的bat处理脚本,希望您的方案不要太复杂,能保存为.bat点击一下就能用,谢谢。

若解决问题的人多,以第一个解决方案为中标者,其他人感谢参与!

你的文本每个人都是按时间排好序的?

TOP

本帖最后由 末夏未至 于 2018-6-16 21:02 编辑

回复 2# digger

没排好序,而且id也是乱的。

大致是这样的:

2018年6月16日    小明   消息
2018年6月16日    小王   消息
2018年6月16日    小王   消息
2018年6月15日    小明   消息
2018年6月14日    小明   消息
2018年6月13日    小明   消息

就是比较正常的微信聊天记录

时间是精确到2018-6-16 21:02:30  这样分钟数的。

TOP

假设 你的文本文件名字为 微信聊天.txt
假设文本行开头的日期格式为:
年/月/日 时:分:秒 或者为 年/月/日 时:分
或者为 年-月-日 时:分 或者为 年-月-日 时:分:秒
例如 2018-6-16 21:02:30  或 2018-/6/16 21:02
如果任然不行,请跟帖并且发附件说明
  1. @if(0)==(0) echo off
  2. type "微信聊天.txt" | cscript //nologo //e:jscript "%~f0" > output.txt
  3. pause & goto :EOF
  4. @end
  5. var map = [];
  6. while(!WSH.StdIn.AtEndOfStream) {
  7.     var s = WSH.StdIn.ReadLine();    //逐行读取文本
  8.     var m = s.match(/^(\d{4}[/-]\d{1,2}[/-]\d{1,2} \d{1,2}(?::\d{1,2}){1,2})\s+(\S+).+/); //匹配日期格式的行
  9.     if(!m) break;  //不匹配就忽略该行
  10.     var dt = m[1].replace(/(\D)(\d)(?=\D|$)/g, '$10$2');  //日期中的数字补0
  11.     if(!map[m[2]]) {
  12.         map[m[2]] = [];
  13.         map[m[2]][0] = dt;    //赋值二维数组
  14.         map[m[2]][1] = m[0];
  15.     } else if(dt > map[m[2]][0]) {
  16.         map[m[2]][0] = dt;    //日期大的话,重新赋值
  17.         map[m[2]][1] = m[0];
  18.     }
  19. }
  20. for(var key in map) WSH.Echo(map[key][1]);
复制代码

TOP

回复 4# WHY

感谢帮助!问题已付费解决。您的程序提示:过程试图写入的管道不存在。
其他网友的解决方案为POWERSHELL

TOP

回复 4# WHY


    已加您为好友,下次有机会再合作

TOP

本帖最后由 WHY 于 2018-6-17 00:09 编辑

没注意是 utf8 格式
解决了就好,我也贴个:
  1. @echo off
  2. PowerShell -c "type 微信聊天.txt|?{$_ -match '^\d{4}/\d{1,2}/\d{1,2} \d{1,2}:\d{1,2}'}|sort @{e={[datetime]($_ -replace '^(\S+ \S+).+','$1')};des=$true}|group{$_ -replace '^\S+ \S+\s+(\S+).+','$1'}|%%{$_.Group[0]}|Out-File 结果.txt -Enc UTF8"
  3. pause
复制代码

TOP

回复 5# 末夏未至


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

TOP

没注意是 utf8 格式
解决了就好,我也贴个:
WHY 发表于 2018-6-16 23:30

老铁,你这个结果可能会少

TOP

回复 9# digger


    我昨晚下载过一次附件,测试没报错就删掉了,也懒得再搞,只要思路没错就好。

TOP

4楼 break 应该为 continue

TOP

返回列表