标题: [新手求助] 关于批处理数字和时间运算
[打印本页]
作者: sady2009
时间: 2009-2-23 13:23
标题: [新手求助] 关于批处理数字和时间运算
请论坛大们指点一下:
第一个问题:(已解决)
现有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 ]
作者: zhengqian529
时间: 2009-2-23 17:32
标题: 可以解决你的问题
复制这个代码,执行一下,可以解决你的问题,在我这里测试是通过的。
@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
作者: moniuming
时间: 2009-2-23 18:23
@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
)
作者: sady2009
时间: 2009-2-23 18:36
非常感谢。2楼的朋友会生成多余的列。 3楼的代码非常好,生成的结果完全符合我的预期。
作者: sady2009
时间: 2009-2-23 21:11
新增第二个问题,请大大们再指导一下。
作者: HAT
时间: 2009-2-23 21:12
标题: Re 4楼
如果有人帮你解决了问题,建议进行以下操作:
1、修改帖子标题,在标题最前面注明:[已结]
2、给竭尽所能帮你的人、正确回答问题的人加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。
3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。
作者: netbenton
时间: 2009-2-23 22:08
::时间相减
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
作者: sady2009
时间: 2009-2-24 09:20
谢谢楼上的朋友指点。
自己也写了一个。先把时间转为分钟. 为了判断开头是零的问题,写了大段代码。想不到在前面加个数字就可以解决了,真是妙极了。
不过,有个问题。 比如: 如果是00:20-23:20 就会出错了,有办法解决24小时之外的时间运算吗?
作者: HAT
时间: 2009-2-24 11:25
标题: Re 8楼
批处理函数库里面有计算时间的方法
http://www.cn-dos.net/forum/viewthread.php?tid=45204