中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 实时获取txt文件的内容值达条件则执行批处理?
作者:
标题: 实时获取txt文件的内容值达条件则执行批处理? 上一主题 | 下一主题
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『楼 主』:  实时获取txt文件的内容值达条件则执行批处理?

实时获取txt文件的内容值后计算符合条件则执行另一批处理程序?请指教.
存放目录:d:\record
txt 文件名:Ter2008Y4M16D12h.txt
                Ter2008Y4M16D13h.txt
                 Ter2008Y4M16D14h.txt
                   Ter2008Y4M16D15h.txt
                                :
                                 : 每一小时就会生成一个这样的文件.


txt的格式为: ( 记录每秒钟生成一行,时间间隔可以指定,如3分钟生成一行记录,
每次要取最后一笔记录最后一列的值.)

682    2008-4-16 15:00:00   26.75
683    2008-4-16 15:00:01   26.75
684    2008-4-16 15:00:02   26.75
685    2008-4-16 15:00:03   27.25
686    2008-4-16 15:00:04   27.25
687    2008-4-16 15:00:05   27
688    2008-4-16 15:00:06   27
689    2008-4-16 15:00:07   27.25
690    2008-4-16 15:00:08   26.75
691    2008-4-16 15:00:09   27.5
692    2008-4-16 15:00:10   27.5
693    2008-4-16 15:00:12   26.75
694    2008-4-16 15:00:13   27.5
695    2008-4-16 15:00:14   27.25
696    2008-4-16 15:00:15   27
697    2008-4-16 15:00:16   27
698    2008-4-16 15:00:17   27.25
699    2008-4-16 15:00:18   27.25
700    2008-4-16 15:00:19   27.5
701    2008-4-16 15:00:20   27.25
702    2008-4-16 15:00:21   27.25
703    2008-4-16 15:00:22   27.25

现要求能否通过程序实时监控(或隔3分钟)取最新生成的txt文件最后一列的值,,如果取值大于30就自动去执行另一个批处理程序;每天自动将d:\record
目录下前一天的生成的所有txt压缩到另一目录存放以前一日期命名的压缩包文件.如: d:\rardata\%date%-1.rar

[ Last edited by qwertl on 2008-9-2 at 08:54 PM ]

2008-9-2 20:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@echo off
set SrcDir=C:\test
:begin
for /f "tokens=*" %%a in ('dir /b /a-d /o-d "%SrcDir%\*.txt"') do (
  for /f "usebackq tokens=4 delims=. " %%b in ("%%a") do (
    if %%b gtr 30 (
      echo start 另一个批处理程序.bat
          ping -n 10 127.1>nul
          goto :begin
    )
  )
  ping -n 10 127.1>nul
  goto :begin
)


   此帖被 +2 点积分      点击查看详情   
评分人:【 qwertl 分数: +2  时间:2008-9-12 22:01




2008-9-2 20:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 3 楼』:  

谢谢HAT.用goto就搞定,神了.  


还有每天自动将d:\record
目录下前一天的生成的所有txt压缩到另一目录存放以前一日期命名的压缩包文件.如: d:\rardata\%date%-1.rar
要怎样来做呢?

[ Last edited by qwertl on 2008-9-2 at 09:19 PM ]

2008-9-2 21:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@echo off
setlocal enabledelayedexpansion
set SrcDir=C:\test
set DstDir=C:\test\rardata
set RarPath=C:\Program Files\WinRAR
>"%tmp%\MyDel.vbs" echo dt=date()-1
>>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
>>"%tmp%\MyDel.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set DateFlag=%%a
for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"') do (
  set FileDate=%%~ta
  set FileDate=!FileDate:-=!
  set FileDate=!FileDate:~0,8!
  if !FileDate! equ %DateFlag% (
    "%RarPath%\rar.exe" a "%DstDir%\!DateFlag!.rar" "%%a"
  )
)


   此帖被 +2 点积分      点击查看详情   
评分人:【 qwertl 分数: +2  时间:2008-9-12 22:01




2008-9-2 21:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 5 楼』:  

这样是可行,但是txt 文件名:Ter2008Y4M16D12h.txt
                Ter2008Y4M16D13h.txt
                 Ter2008Y4M16D14h.txt
                   Ter2008Y4M16D15h.txt
                                  : 每一小时就会生成一个这样的文件.

txt每秒钟就有一行记录的话也比较占CPU及内存资源?能否每当一新txt文件生成时自动将前面的文件明间生成的txt移动到另一目录呢?这样应该就不会再重复去处理很多过时的值.
压缩的问题己经看上一贴会了,不过很多命令还要学习才看懂.真是感谢啦!

[ Last edited by qwertl on 2008-9-2 at 10:04 PM ]

2008-9-2 21:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

这些文本文件是由批处理产生的吗?是的话,在那个批处理里面加个move就行了吧。



2008-9-2 22:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 7 楼』:  

文本文件不是由批处理生成的,是由一个rs232设备固定格式生成的数据,所以控制不到,但每个文件的记录数是可以设置时间间隔略长些,

for /f "tokens=*" %%a in ('dir /s /b /a-d /o-d"%SrcDir%"') do (
这里是否可以指定只取第一行的txt传给%%a呢?可以的话处理最新生成的txt文件即可.

不能指定只取第一行的话能否将除第一行的TXT文件保留,其它的TXT全移动到另一目录去.然后再执行二楼的代码.

[ Last edited by qwertl on 2008-9-2 at 10:41 PM ]

2008-9-2 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

由于goto语句的存在,后面的应该只处理第一行的txt吧,也就是说只处理最新生成的txt文件



2008-9-2 22:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

这样会不会清楚一点:
@echo off
set SrcDir=C:\test
:begin
for /f "tokens=*" %%a in ('dir /b /a-d /o-d "%SrcDir%\*.txt"') do (
  set NewFile=%%a
  goto :next
)
goto :eof

:next
for /f "usebackq tokens=4 delims=. " %%b in ("%NewFile%") do (
  if %%b gtr 30 (
    echo start 另一个批处理程序.bat
    ping -n 10 127.1 >nul
    goto :begin
  )
)
ping -n 10 127.1 >nul
goto :begin




2008-9-2 23:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 10 楼』:  

C:\>set SrcDir=C:\test

C:\>dir /b /a-d /o-d "C:\test\*.txt
TEMPer2008Y3M30D9h.txt
TEMPer2008Y4M16D15h.txt
TEMPer2008Y3M28D15h.txt

运行9楼代码,循环出现系统找不到文件 TEMPer2008Y3M30D9h.txt。
c:\test\TEMPer2008Y3M30D9h.txt文件记录:
1    2008-3-30 9:19:25   0
2    2008-3-30 9:19:26   0
3    2008-3-30 9:19:27   0
4    2008-3-30 9:19:28   0
5    2008-3-30 9:19:29   0
6    2008-3-30 9:19:30   31
7    2008-3-30 9:22:32   -13.25
8    2008-3-30 9:22:32   -13.25

____________________________________________________________

C:\>usbt

C:\>set SrcDir=C:\test

C:\>for /F "tokens=*" %a in ('dir /b /a-d /o-d "C:\test\*.txt"') do (
set NewFile=%a
goto :next
)

C:\>(
set NewFile=TEMPer2008Y3M30D9h.txt
goto :next
)

C:\>for /F "usebackq tokens=4 delims=. " %b in ("TEMPer2008Y3M30D9h.txt") do (if
%b GTR 30 (
echo start c:\12.bat
ping -n 10 127.1  1>nul
goto :begin
) )
系统找不到文件 TEMPer2008Y3M30D9h.txt。

C:\>ping -n 10 127.1  1>nul

C:\>goto :begin

C:\>for /F "tokens=*" %a in ('dir /b /a-d /o-d "C:\test\*.txt"') do (
set NewFile=%a
goto :next
)

C:\>(
set NewFile=TEMPer2008Y3M30D9h.txt
goto :next
)

C:\>for /F "usebackq tokens=4 delims=. " %b in ("TEMPer2008Y3M30D9h.txt") do (if
%b GTR 30 (
echo start c:\12.bat
ping -n 10 127.1  1>nul
goto :begin
) )
系统找不到文件 TEMPer2008Y3M30D9h.txt。

C:\>ping -n 10 127.1  1>nul
^C终止批处理操作吗(Y/N)?

[ Last edited by qwertl on 2008-9-2 at 11:46 PM ]

2008-9-2 23:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

第二个for里面应该用绝对路径
@echo off
set SrcDir=C:\test
:begin
for /f "tokens=*" %%a in ('dir /b /a-d /o-d "%SrcDir%\*.txt"') do (
  set NewFile=%%a
  goto :next
)
goto :eof

for /f "usebackq tokens=4 delims=. " %%b in ("%SrcDir%\%NewFile%") do (
  if %%b gtr 30 (
    echo start 另一个批处理程序.bat
    ping -n 10 127.1 >nul
    goto :begin
  )
)
ping -n 10 127.1 >nul
goto :begin




2008-9-2 23:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 12 楼』:  

可以了,太棒了.

2008-9-3 00:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
keguanglidos
新手上路





积分 18
发帖 9
注册 2008-8-9
状态 离线
『第 13 楼』:  

批处理也可以这样啊,学习了,谢谢了

2008-9-3 04:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: