Board logo

标题: [文本处理] [已解决]批处理怎样实现通话时长当日合计? [打印本页]

作者: 非常感谢    时间: 2013-8-16 13:05     标题: [已解决]批处理怎样实现通话时长当日合计?

批处理前(如:今天是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
作者: terse    时间: 2013-8-16 14:50

本帖最后由 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
复制代码

作者: apang    时间: 2013-8-16 16:02

本帖最后由 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 $
复制代码

作者: 非常感谢    时间: 2013-8-16 16:10

本帖最后由 非常感谢 于 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
作者: apang    时间: 2013-8-16 16:50

回复 5# 非常感谢


    已修改
作者: 非常感谢    时间: 2013-8-16 19:14

本帖最后由 非常感谢 于 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
作者: apang    时间: 2013-8-16 19:45

回复 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

本帖最后由 非常感谢 于 2013-8-16 23:11 编辑

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

    谢谢,!!!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2