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

[文本处理] [已解决]批处理怎样实现通话时长当日合计?

[复制链接]
发表于 2013-8-16 13:05:11 | 显示全部楼层 |阅读模式
批处理前(如:今天是2013年8月10日)
日期;日期;项目;目的地;类别;费率;通话时长;信用点数金额;货币

"2013年8月10日 23:10";"2013-08-02T23:10:57+00:00";"+861077777777";"China-Beijing";"通话";0.000;00:10:09;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:39+00:00";"+861011111111";"China-Beijing";"通话";0.000;00:05:07;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:22+00:00";"+861022222222";"China-Beijing";"通话";0.000;01:08:08;0.000;KRW
"2013年8月9日 23:10";"2013-08-02T23:10:57+00:00";"+8610333333333";"China-Beijing";"通话";0.000;00:19:09;0.000;KRW
"2013年8月9日 23:10";"2013-08-02T23:10:39+00:00";"+8610555555555";"China-Beijing";"通话";0.000;00:25:07;0.000;KRW

批处理后:(保留当天数据,并对通话时长做一个排列,如下面。)
2013年8月10日     +861022222222      01:08:08
2013年8月10日     +861077777777      00:10:09
2013年8月10日     +861011111111      00:05:07

合计: 01:23:24

评分

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

查看全部评分

发表于 2013-8-16 14:50:28 | 显示全部楼层
本帖最后由 terse 于 2013-8-16 21:51 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3" %%i in ('wmic path Win32_LocalTime get Month^,Day^,Year') do set "ymd=%%k年%%j月%%i日"
  3. for /f "delims=U" %%a in ('cmd /u/c echo,唉') do set "tab=%%a"
  4. (for /f "tokens=1,3,7 delims=;" %%i in ('findstr /ic:"%ymd% " a.txt') do (
  5.         for /f %%a in (%%i) do set str1=%%~a
  6.         for /f %%a in (%%j) do set str2=%%~a
  7.         for /f "tokens=1-3 delims=:" %%a in ("%%k") do (
  8.                 set /a "t1+=1%%a%%100,t2+=1%%b%%100,t3+=1%%c%%100"
  9.         )
  10.         echo %%k !str1!%Tab%!str2!%Tab%%%k
  11. ))>$.t
  12.         for /f "tokens=1*" %%i in ('sort /r $.t') do echo %%j
  13.         set /a "t2+=t3/60,t1+=t2/60,t2%%=60,t3%%=60"
  14.         echo !t1!:!t2!:!t3!
  15.         del $.t
  16. pause
复制代码

评分

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

查看全部评分

发表于 2013-8-16 16:02:28 | 显示全部楼层
本帖最后由 apang 于 2013-8-16 16:48 编辑

只对日期格式 yyyy-mm-dd、yyyy/mm/dd 或 yyyy.mm.dd 有效
  1. @echo off
  2. for /f "tokens=1-3delims=-./" %%a in ("%date:~,10%") do (
  3.     set /a yy=%%a,mm=1%%b-100,dd=1%%c-100
  4. )

  5. (for /f "tokens=1-7delims=;" %%a in ('findstr %yy%年%mm%月%dd%日 a.txt')do (
  6.     for /f %%i in ("%%~a") do echo,%%g %%i     %%~c     %%g
  7.     for /f "tokens=1-3 delims=:" %%i in ("%%g") do (
  8.         set /a h+=1%%i-100,m+=1%%j-100,s+=1%%k-100
  9.     )
  10. ))>$

  11. set /a k1=s/60,s=s%%60+100,m+=k1,k2=m/60,m=m%%60+100,h+=k2

  12. (
  13.     for /f "tokens=1*" %%a in ('sort /r $') do echo,%%b
  14.     echo,&echo,合计:%h%:%m:~1%:%s:~1%
  15. )>b.txt
  16. del $
复制代码

评分

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

查看全部评分

 楼主| 发表于 2013-8-16 16:10:28 | 显示全部楼层
本帖最后由 非常感谢 于 2013-8-16 16:34 编辑

回复 4# apang

批处理前:
可不可以不过滤同样的号码和同样的时间,因为处理前是10行,处理后是4行,看起来别扭。
"2013年8月10日 23:10";"2013-08-02T23:10:57+00:00";"+861077777777";"China-Beijing";"通话";0.000;00:10:09;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:39+00:00";"+861011111111";"China-Beijing";"通话";0.000;00:05:07;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:22+00:00";"+861022222222";"China-Beijing";"通话";0.000;01:08:08;0.000;KRW
"2013年8月9日 23:10";"2013-08-02T23:10:57+00:00";"+8610333333333";"China-Beijing";"通话";0.000;00:19:09;0.000;KRW
"2013年8月9日 23:10";"2013-08-02T23:10:39+00:00";"+8610555555555";"China-Beijing";"通话";0.000;00:25:07;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:57+00:00";"+861077777777";"China-Beijing";"通话";0.000;00:10:09;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:39+00:00";"+861011111111";"China-Beijing";"通话";0.000;00:05:07;0.000;KRW
"2013年8月10日 23:10";"2013-08-02T23:10:22+00:00";"+861022222222";"China-Beijing";"通话";0.000;01:08:08;0.000;KRW
"2013年8月9日 23:10";"2013-08-02T23:10:57+00:00";"+8610333333333";"China-Beijing";"通话";0.000;00:19:09;0.000;KRW
"2013年8月9日 23:10";"2013-08-02T23:10:39+00:00";"+8610555555555";"China-Beijing";"通话";0.000;00:25:07;0.000;KRW

批处理后:
2013年8月10日     +861022222222     01:08:08
2013年8月10日     +861077777777     00:10:29
2013年8月10日     +861077777777     00:10:09
2013年8月10日     +861011111111     00:05:07

合计:4:10:32
发表于 2013-8-16 16:50:01 | 显示全部楼层
回复 5# 非常感谢


    已修改
 楼主| 发表于 2013-8-16 19:14:07 | 显示全部楼层
本帖最后由 非常感谢 于 2013-8-16 19:15 编辑

回复 5# apang

因为日期和电话号码的长度不同,会造成视觉上参差不齐,能不能相互之间的空格不做固定处理?


   
2013年8月10日     +861022222222    01:08:08
2013年8月8日     +86107777777777     00:10:29
2013年8月10日     +861077777777     00:10:09
2013年8月1日     +865321111111111     00:05:07

批处理后:(这个样子就可以)
2013年8月10日          +861022222222                   01:08:08
2013年8月8日            +86107777777777               00:10:29
2013年8月10日          +861077777777                   00:10:09
2013年8月1日            +865321111111111             00:05:07
发表于 2013-8-16 19:45:48 | 显示全部楼层
回复 6# 非常感谢


    第1、2行之间插入一行:
  1. for /f "delims=U" %%a in ('cmd /u/c echo,唉') do set "tab=%%a"
复制代码
第7行改成:
  1.     for /f %%i in ("%%~a") do echo,%%g %%i%tab%%%~c%tab%%%g
复制代码
PS:清楚地记得,楼主开始要求的是5个空格。此帖我不会再回复。
 楼主| 发表于 2013-8-16 20:03:10 | 显示全部楼层
本帖最后由 非常感谢 于 2013-8-16 23:11 编辑

回复 7# apang
因为主题内容和要求的实际结果出现了偏差,所以修改了一下主题内容。请谅解!

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

本版积分规则

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

GMT+8, 2026-3-19 06:21 , Processed in 0.022657 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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