中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 05:06
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 求助:FOR命令计算
可打印版本  1,128 / 4
第1楼 xycoordinate 发表于 2010-09-28 11:07
中级用户 发帖 228 积分 493 来自 安徽
求助:FOR命令计算
1.txt
商户1 15600
商户2 15600
商户3 15600
商户4 15600
商户5 15601
商户6 15601
商户7 15601
商户8 15601
商户9 15601

2.txt
商户2 20
商户2 30
商户4 10

商户5 15
商户7 40
商户7 50
商户9 60


1.txt & 2.txt ---->3.txt
文件1.txt和2.txt 生成3.txt
3.txt
15600 60
15601 165

PS:
60=20+30+10
165=15+40+50+60

[ Last edited by xycoordinate on 2010-9-30 at 16:48 ]
第2楼 xycoordinate 发表于 2010-09-30 16:41
中级用户 发帖 228 积分 493 来自 安徽
自己顶!!!

@echo off
setlocal enabledelayedexpansion

for /f "tokens=1,2" %%a in (1.txt) do (
set str1=%%a
set str2=%%b

for /f "tokens=1,2" %%i in (2.txt) do (
set sh=%%i
set je=%%j
if !sh!==!str1! @echo !str2! !je!
)

)


结果:
15600 20
15600 30
15600 10

15601 15
15601 40
15601 50
15601 60

我想得到合计数!怎么办???

[ Last edited by xycoordinate on 2010-10-3 at 23:41 ]
第3楼 xycoordinate 发表于 2010-10-03 23:42
中级用户 发帖 228 积分 493 来自 安徽
主要是中间有个标志变化 15600 15601后面还有15602……

也就是每组小计一下

最好得到:

15600 20
15600 30
15600 10
15600-小计 60


15601 15
15601 40
15601 50
15601 60
15601-小计 165

合计 225

[ Last edited by xycoordinate on 2010-10-3 at 23:56 ]
第4楼 zhoupeng243 发表于 2010-10-04 14:51
新手上路 发帖 15 积分 13
难判断什么时候每项小计算完,只好最后显示小计
@echo off
setlocal enabledelayedexpansion

set num15600=0
set num15601=0

for /f "tokens=1,2" %%a in (1.txt) do (
set str1=%%a
set str2=%%b

for /f "tokens=1,2" %%i in (2.txt) do (
set sh=%%i
set je=%%j
if !sh!==!str1! (set /a num!str2!=num!str2!+!je!)
if !sh!==!str1! @echo !str2! !je!
)
)

echo 15600-小计 !num15600!
echo 15601-小计 !num15601!
第5楼 xycoordinate 发表于 2010-10-05 00:06
中级用户 发帖 228 积分 493 来自 安徽
谢谢!

我后面还有其他机构15602 15604 15605 ……15610 15611 15612……
前面都有定义

num156??=0

???

[ Last edited by xycoordinate on 2010-10-5 at 10:03 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023