中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [新手求助] 关于批处理数字和时间运算
作者:
标题: [新手求助] 关于批处理数字和时间运算 上一主题 | 下一主题
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『楼 主』:  [新手求助] 关于批处理数字和时间运算

请论坛大们指点一下:

第一个问题:(已解决)

现有a.txt 内容如下:(有几万行)
100 aaaaaaaaa
120 aaaaaaaaa
122 aaaaaaaaa
138 aaaaaaaaa



要求对a.txt 批处理生成b.txt (第二行数字减第一行数字放置于第一行第二列)
100 20 aaaaaaaaa
120 2 aaaaaaaaa
122 16 aaaaaaaaa


如何才能做到呢? 这个问题已解决。谢谢3楼的朋友。


第二个问题:如果把数字改为时间呢?又怎么处理呢?

比如a.txt

04:23 aaaaaaaaa
6:50 aaaaaaaaa
10:32 aaaaaaaaa
15:30 aaaaaaaaa
18:40 aaaaaaaaa
20:00 aaaaaaaaa
23:50 aaaaaaaaa
00:30 aaaaaaaaaa
01:31 aaaaaaaaaa

生成b.txt  (时间肯定是递增的,XX单位为分钟)

04:23 XX aaaaaaaaa
06:50 XX aaaaaaaaa
10:32 XX aaaaaaaaa
15:30 XX aaaaaaaaa
..
..
   


谢谢!

[ Last edited by sady2009 on 2009-2-23 at 21:10 ]

2009-2-23 13:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhengqian529
初级用户





积分 100
发帖 93
注册 2009-1-14
来自 湖南
状态 离线
『第 2 楼』:  可以解决你的问题

复制这个代码,执行一下,可以解决你的问题,在我这里测试是通过的。
@echo off&setlocal EnableDelayedExpansion
set num1=0
set num2=0

for /f "delims= " %%i in (a.txt) do (
    set var=%%i
    if defined var goto begin
)

:begin
for /f "skip=1 delims= " %%i in (a.txt) do (
    set bar=!var!
    set var=%%i
    set /a car=!var!-!bar!
    echo !car!>>b.txt
)
set /a car=!bar!-!bar!
echo !car!>>b.txt
goto insert

:insert
for /f "tokens=1,2 delims= " %%a in (a.txt) do (
    set /a num1+=1
    for /f "delims=" %%i in (b.txt) do (
        set /a num2+=1
        if !num1!==!num2! echo %%a %%i %%b>>c.txt
    )
    set num2=0
)
del b.txt
endlocal
goto :eof


   此帖被 +1 点积分    点击查看详情   
评分人:【 sady2009 分数: +1  时间:2009-2-23 18:37


2009-2-23 17:32
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (250988158)  编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 3 楼』:  


@echo off
Setlocal Enabledelayedexpansion
type nul>b.txt
set /a m=0,n=m-1
for /f "tokens=1,*" %%a in ('type a.txt') do (
  set str!m!=%%a&set var!m!=%%b
  if !m! gtr 0 (
    set /a sth=str!m!-str!n!
    >>b.txt call echo %%str!n!%% !sth! %%var!n!%%
  )
  set /a m+=1,n+=1
)


   此帖被 +3 点积分    点击查看详情   
评分人:【 sady2009 分数: +1  时间:2009-2-23 18:37
评分人:【 zhengqian529 分数: +2  时间:2009-2-23 18:58


2009-2-23 18:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 4 楼』:  

非常感谢。2楼的朋友会生成多余的列。 3楼的代码非常好,生成的结果完全符合我的预期。

2009-2-23 18:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 5 楼』:  

新增第二个问题,请大大们再指导一下。

2009-2-23 21:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  Re 4楼

如果有人帮你解决了问题,建议进行以下操作:

1、修改帖子标题,在标题最前面注明:[已结]

2、给竭尽所能帮你的人、正确回答问题的人加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。

3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。



2009-2-23 21:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 7 楼』:  

::时间相减

set strm=str!m!&set strn=str!n!
set/a sth=1!strm:~0,2!-1!strn:~0,2!
set/a sti=1!strm:~3!-1!strn:~3!
set/a sth=(sth-sti/60)*60+sti-sti/60*40



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-2-23 22:08
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 8 楼』:  

谢谢楼上的朋友指点。

自己也写了一个。先把时间转为分钟. 为了判断开头是零的问题,写了大段代码。想不到在前面加个数字就可以解决了,真是妙极了。

不过,有个问题。 比如: 如果是00:20-23:20 就会出错了,有办法解决24小时之外的时间运算吗?

2009-2-24 09:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  Re 8楼

批处理函数库里面有计算时间的方法
http://www.cn-dos.net/forum/viewthread.php?tid=45204



2009-2-24 11:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: