楼 主
[新手求助] 关于批处理数字和时间运算
发表于 2009-02-23 13:23 · 中国 浙江 温州 电信
初级用户
★★
积分 58 发帖 60 注册 2009-02-18 12:48 17年会员 UID 139163 性别 男
状态 离线
请论坛大们指点一下:
第一个问题:(已解决)
现有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 ]
第 2 楼
可以解决你的问题
发表于 2009-02-23 17:32 · 美国 华盛顿州 金 雷德蒙德 Microsoft
初级用户
★★
积分 100 发帖 93 注册 2009-01-14 15:04 17年会员 UID 136661 性别 男 来自 湖南
状态 离线
复制这个代码,执行一下,可以解决你的问题,在我这里测试是通过的。
@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
第 3 楼
发表于 2009-02-23 18:23 · 中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335 发帖 574 注册 2007-11-27 12:50 18年会员 UID 103929 性别 男 来自 广西
状态 离线
@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
)
第 4 楼
发表于 2009-02-23 18:36 · 中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58 发帖 60 注册 2009-02-18 12:48 17年会员 UID 139163 性别 男
状态 离线
非常感谢。2楼的朋友会生成多余的列。 3楼的代码非常好,生成的结果完全符合我的预期。
第 5 楼
发表于 2009-02-23 21:11 · 中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58 发帖 60 注册 2009-02-18 12:48 17年会员 UID 139163 性别 男
状态 离线
第 6 楼
Re 4楼
发表于 2009-02-23 21:12 · 中国 重庆 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
如果有人帮你解决了问题,建议进行以下操作:
1、修改帖子标题,在标题最前面注明:[已结]
2、给竭尽所能帮你的人、正确回答问题的人加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。
3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。
第 7 楼
发表于 2009-02-23 22:08 · 中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916 发帖 752 注册 2008-12-28 04:30 17年会员 UID 135147 性别 男 来自 广西
状态 离线
::时间相减
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
第 8 楼
发表于 2009-02-24 09:20 · 中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58 发帖 60 注册 2009-02-18 12:48 17年会员 UID 139163 性别 男
状态 离线
谢谢楼上的朋友指点。
自己也写了一个。先把时间转为分钟. 为了判断开头是零的问题,写了大段代码。想不到在前面加个数字就可以解决了,真是妙极了。
不过,有个问题。 比如: 如果是00:20-23:20 就会出错了,有办法解决24小时之外的时间运算吗?
第 9 楼
Re 8楼
发表于 2009-02-24 11:25 · 美国 惠普HP
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正