在DOS联盟里也看到了你的求助帖,在那个帖子里,你最开始还想求出每个操作员的操作次数。其实,用批处理是完全可以办到的。
从你在顶楼发的数据来看,我并没有找到操作员的信息,姑且把客户帐号当作你想要的操作员吧,现在,我把你的环境做如下假设(若与你的情况不符,请跟帖提出):
在某个文件夹下(假设是test),只存在从20070101到20071231为名的文件夹,而每个文件夹下,都存在一个1357.txt文件,这个文件存放的是你即将要统计的数据,金额一栏小数点后的两位数字都是0,现在要统计每个操作员的操作次数(在你的数据中,实际上对应的是客户帐号)及总共的金额,那么,可把如下代码放到test目录下运行即可。
以下代码的总体思路是:先在当前目录及其所有子目录中搜索1357.txt,然后,把所有1357.txt的内容都去掉头5行之后,合并到test.txt中,再对test.txt的内容进行排序,通过比较上下行第一列内容的不同求出客户帐号出现的次数(也就是操作员操作的次数),从而避免了设置大量变量的情况,和DOS联盟3742668的代码比起来,这个方案能够避免产生大量的临时文件:- @echo off
- :: 凌晨时发的代码有错误,请用本次代码测试[2008-1-29 17:59]
- cd.>test.txt
- set /a total=0,times=1
- for /f "delims=" %%i in ('dir /a-d /b /s 1357.txt') do (
- >>test.txt more +5 "%%i"
- )
- setlocal enabledelayedexpansion
- for /f "tokens=1,4,5 delims=,. " %%i in ('sort test.txt') do (
- if defined ID (
- if "!ID!"=="%%i" (
- set /a times+=1
- ) else (
- echo !ID! 出现的次数是 !times!
- set times=1
- )
- )
- set /a total+=%%j%%k
- set ID=%%i
- )
- echo %ID% 出现的次数是 %times%
- echo 总金额是 %total%.00
- pause
复制代码 如果只需要统计总金额,那就太容易了:- @echo off
- for /f "delims=" %%i in ('dir /a-d /b /s 1357.txt') do (
- for /f "usebackq skip=5 tokens=4,5 delims=,. " %%j in ("%%i") do (
- set /a total+=%%j%%k
- )
- )
- echo 总金额是 %total%.00
- pause
复制代码 另:你在顶楼发了两个数据附件,但是内容都是一样的,我猜想你是想另传一个不带小数点的数据文件,但是选重了。我删除了其中一个,请把不带小数点的数据文件也发出来,让我们看一下格式吧。 |