标题: [文本处理] [已解决]批处理怎样实现通话时长当日合计? [打印本页]
作者: 非常感谢 时间: 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 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1-3" %%i in ('wmic path Win32_LocalTime get Month^,Day^,Year') do set "ymd=%%k年%%j月%%i日"
- for /f "delims=U" %%a in ('cmd /u/c echo,唉') do set "tab=%%a"
- (for /f "tokens=1,3,7 delims=;" %%i in ('findstr /ic:"%ymd% " a.txt') do (
- for /f %%a in (%%i) do set str1=%%~a
- for /f %%a in (%%j) do set str2=%%~a
- for /f "tokens=1-3 delims=:" %%a in ("%%k") do (
- set /a "t1+=1%%a%%100,t2+=1%%b%%100,t3+=1%%c%%100"
- )
- echo %%k !str1!%Tab%!str2!%Tab%%%k
- ))>$.t
- for /f "tokens=1*" %%i in ('sort /r $.t') do echo %%j
- set /a "t2+=t3/60,t1+=t2/60,t2%%=60,t3%%=60"
- echo !t1!:!t2!:!t3!
- del $.t
- pause
复制代码
作者: apang 时间: 2013-8-16 16:02
本帖最后由 apang 于 2013-8-16 16:48 编辑
只对日期格式 yyyy-mm-dd、yyyy/mm/dd 或 yyyy.mm.dd 有效- @echo off
- for /f "tokens=1-3delims=-./" %%a in ("%date:~,10%") do (
- set /a yy=%%a,mm=1%%b-100,dd=1%%c-100
- )
-
- (for /f "tokens=1-7delims=;" %%a in ('findstr %yy%年%mm%月%dd%日 a.txt')do (
- for /f %%i in ("%%~a") do echo,%%g %%i %%~c %%g
- for /f "tokens=1-3 delims=:" %%i in ("%%g") do (
- set /a h+=1%%i-100,m+=1%%j-100,s+=1%%k-100
- )
- ))>$
-
- set /a k1=s/60,s=s%%60+100,m+=k1,k2=m/60,m=m%%60+100,h+=k2
-
- (
- for /f "tokens=1*" %%a in ('sort /r $') do echo,%%b
- echo,&echo,合计:%h%:%m:~1%:%s:~1%
- )>b.txt
- 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行之间插入一行:- for /f "delims=U" %%a in ('cmd /u/c echo,唉') do set "tab=%%a"
复制代码
第7行改成:- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |