[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
假设 你的文本文件名字为 微信聊天.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

本帖最后由 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

回复 9# digger


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

TOP

4楼 break 应该为 continue

TOP

返回列表