中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-25 17:48
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 符合这一功能的P处理怎样写.
可打印版本  2,691 / 17
第1楼 joshualaw 发表于 2007-08-07 16:20
初级用户 发帖 62 积分 132
符合这一功能的P处理怎样写.
在数据处理过程中 (C:\123\很多.TXT 文件), 本人急求能实现下列功能的P 处理, 请帮忙啊!

1> 第三行相同
2> 第一行大于或等于
3> 第二行大于 的.txt文件,移到C:\456,如下.应移B.txt

注: (第一, 二和三行要比较的字符,全部都是变量, 同一行之间是以TAB键为分隔)

下面是两个.txt文件的部分内容.

A.txt

Date 06/29/07
Time 08:16:26
Serial # ML07300010JEB
Script file 2820.scr
Station GXHCDG02
PASSED

CAPTURED TARS DATA
LABEL VALUE
AssyNum W10130544
GDS_ErrTmp 0x00
WaterBeforeReload 0x00b5
HVDC_LO_Byte 0x0136
GDS_ErrTmp 0x00

B.txt

Date 06/30/07
Time 08:19:30
Serial # ML07300010JEB
Script file 2820.scr
Station GXHCDG02
PASSED

CAPTURED TARS DATA
LABEL VALUE
AssyNum W10130544
GDS_ErrTmp 0x00
WaterBeforeReload 0x00b5
HVDC_LO_Byte 0x0136
GDS_ErrTmp 0x00

[ Last edited by joshualaw on 2007-8-7 at 09:50 PM ]
第2楼 joshualaw 发表于 2007-08-07 17:46
初级用户 发帖 62 积分 132
Originally posted by 26933062 at 2007-8-7 05:34 PM:
问题是用哪个文件的内容来比较?
全部都跟a.txt的内容比吗?


不是, 对象是C:\123\ 任意Txt文件之间, 先比较第三行, 只有完全相同后,再比较第一行和第二行,
第3楼 joshualaw 发表于 2007-08-07 21:46
初级用户 发帖 62 积分 132
Originally posted by 26933062 at 2007-8-7 06:03 PM:
我晕,
你从C:\123文件夹里任意提取一个文件后,要把它的第一,二,三行和谁对比???
---》因为在C:\123文件夹里含有第三行相同,且第一,二,行不同的文件至少有两个以上,因此在它们之间互相比较,把符合条件的移出来。

还有就是你要对比的应该是你上了颜色的部分吧?
---》是的,分别比较第一,二,三行带有颜色的部分

还有你的第一行内 ...

---》最后的那个07是年,为了不引起混淆,我把第一行的 date 格式写在这,mm/dd/yy

不好意思,或许我没表达好啊,请再看看我的带有颜色的回复,

[ Last edited by joshualaw on 2007-8-7 at 09:48 PM ]
第4楼 joshualaw 发表于 2007-08-08 11:11
初级用户 发帖 62 积分 132
首先谢谢你的热心啊, 但现在还不能运行呢, 错误如下,


现在的问题是,如果有3个以上的文件第三行内容相同.该如何判断第一,二行的内容?
如:4.txt和5.txt和6.txt
对比4.txt和5.txt以后,5.txt符合你的要求,即将被移走.那么6.txt该怎么办?还要继续和4.txt对比吗?
是, 只要第三行相同, 两个两个比第一,二行,总之, 把第三行相同,第一行大于或等于,第二行大于的移出来(日期,时间靠近最近的),

附件
nodefine.jpg (8.86 KiB)
第5楼 joshualaw 发表于 2007-08-08 19:38
初级用户 发帖 62 积分 132
我理解的是: 你的第一行是日期,第二行是时间,在对比的时候,如果第一行大于,就不用再比第二行了,是吗? 如果第一行等于,就再比第二行,是这样的吗?
-->是的
还有个问题就是,如果有三个或三个以上的文件第三行都相同,而第一行的内容分别是,07/20/07 07/25/07 07/30/07 该怎么办?是将07/30/07的文件移走,那剩下的两个还要再比吗?
-->再移07/25/07,如两个都是07/20/07,就看第二行时间谁最大就移谁啊

现我附上了这一文件夹,里面有10 TXT文件,文件 14103806.txt,45678912.txt 和 123455675.txt 这三个文件的第三行都相同

1》P 处理第一次运行时,先移走14103806.txt,因为它的第一行日期是 06/15/07,

2》P 处理第二次运行时,再移走123455675.txt,因为它们的第一行日期相同,都是06/14/07,但第二行时间10:37:20 >10:36:48

上面的英文是说,变量 - + -1 没有定义啊。现希望你能更明白啊,先辛苦了, 谢谢!

[ Last edited by joshualaw on 2007-8-10 at 11:05 PM ]
第6楼 26933062 发表于 2007-08-08 22:56
银牌会员 发帖 879 积分 2,268
终于搞定了......
上面的代码没问题的,问题出在你说每行之间是用tab分隔的,但是事实上你的第三行内容#号前面是空格,不是tab,问题就出在这里.
你上传的文件用这个批处理移走的是14103806.txt和123455675.txt文件,是一次性移走的,不用运行两次.也就是说运行批处理后会将第三行内容相同的,第一行日期最近的(若日期相同,就是第二行时间最近的)文件全部移走.只留下一个文件.
是要这个效果吗?
以下代码在我这里测试成功.以可以处理含空格的文件名.
文件名及前三行文件内容不能含有特殊字符,和_这三个符号.


[ Last edited by 26933062 on 2007-8-9 at 04:47 AM ]
第7楼 island008 发表于 2007-08-08 22:56
新手上路 发帖 4 积分 9
没看明白了.
第8楼 26933062 发表于 2007-08-08 23:05
银牌会员 发帖 879 积分 2,268
代码最后的部分是判断日期和时间的,感觉有些乱,请教各位高手有没有简单一点的判断方法.
如判断 05/30/2007 和 07/20/2007 哪个日期大?
判断 18:20:08 和 09:05:12 哪个时间早?
我是用for将日期分割开来判断的.
时间部分就是直接判断的,
如: if 18:20:08 gtr 09:05:12 echo ok
不知道会不会在某种情况下出错.
第9楼 joshualaw 发表于 2007-08-09 08:05
初级用户 发帖 62 积分 132
Originally posted by 26933062 at 2007-8-8 10:56 PM:
终于搞定了......
上面的代码没问题的,问题出在你说每行之间是用tab分隔的,但是事实上你的第三行内容#号前面是空格,不是tab,问题就出 ...



辛苦了,高啊,所有功能可以实现啦,先谢谢,但还有一点小小的要求如下,看看能否做的到啊。

终于搞定了......
上面的代码没问题的,问题出在你说每行之间是用tab分隔的,但是事实上你的第三行内容#号前面是空格,不是tab,问题就出在这里.
你上传的文件用这个批处理移走的是14103806.txt和123455675.txt文件,是一次性移走的,不用运行两次.也就是说运行批处理后会将第三行内容相同的,第一行日期最近的(若日期相同,就是第二行时间最近的)文件全部移走.只留下一个文件.
是要这个效果吗?
----->能否把第一次,第二次,第三次.....移出的文件,分别移到 c:\456下的不同的文件夹里呢,如: C:\456\1\14103806.txt ,C:\456\2\123455675.txt, 能做到这样的话,这一P处里更加完美和方便处里啊, 谢了,
第10楼 qzwqzw 发表于 2007-08-09 09:06
银牌会员 发帖 636 积分 2,343
26933062

特殊格式日期比较
只需要将他们预先统一为一种格式再进行比较就可以了

如6楼的代码
可以将整理格式后的两个日期分别放入两个变量中进行比较就可以了
完全没有必要对年月日分别进行比较
第11楼 26933062 发表于 2007-08-09 09:59
银牌会员 发帖 879 积分 2,268
应该可以,不过不是按时间顺序排的,可以吗?
那样你不是,总共移走多少个文件,就要在c:\123里建多少个文件夹?还要想想...现在没时间,有空帮你想.
第12楼 26933062 发表于 2007-08-09 10:04
银牌会员 发帖 879 积分 2,268
10 楼的兄弟,我用以下方法判断日期出错,请问是方法错了吗?
@echo off
set a=05/30/2006
set b=05/25/2007
if %a% lss %b% (echo aaa 小) else echo aaa 大
pause
第13楼 joshualaw 发表于 2007-08-13 20:46
初级用户 发帖 62 积分 132
26933062 兄:
能否帮忙抽空完善一下,只要达到下面二个中的任意一个就行。

1》把每次移过去的文件,分别移到C:\456 下的不同文件夹里啊,如:c:\456\11\包含第一次移来的文件 c:\456\22\包含第二次移来的文件 c:\456\33\包含第三次移来的文件,至多移三次

2》每次只要移一个过去。

谢!

[ Last edited by joshualaw on 2007-8-13 at 08:48 PM ]
第14楼 joshualaw 发表于 2007-08-16 07:56
初级用户 发帖 62 积分 132
26933062 兄:

能否帮忙抽空完善一下,使之每次只要移一个过去啊。

谢!
第15楼 qzwqzw 发表于 2007-08-16 08:32
银牌会员 发帖 636 积分 2,343
回应12楼

那是你的日期格式统一的有问题
将它按年月日的顺序排列
在进行比较就不会有问题了

实际上这是对字符串进行比较
而不是对数字串进行比较
因为它所比较的串中存在无效数字(比如/)
不过所实现的效果是类似的

保险起见可以给月日都加上对齐用的0前缀
时间比较也同样类似
只要保证越大的时间单位越靠前就可以了
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023