中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求一个批处理代码实现实时监控并修改文件名,谢谢
作者:
标题: 求一个批处理代码实现实时监控并修改文件名,谢谢 上一主题 | 下一主题
yinguangrong
新手上路





积分 1
发帖 3
注册 2008-12-23
状态 离线
『楼 主』:  求一个批处理代码实现实时监控并修改文件名,谢谢

本人用某种软件做计算,软件是算完第一步,输出一个文件(例如beam.txt),再接着计算第二步,算完后输出第二个同名文件,接着计算第三步.......直到每一步算完。上一步的结果文件会被下一步计算同名结果文件覆盖(郁闷!),当所有步计算都完成后软件会自动退出

软件每一步的计算大概花几分钟到几十分钟不等,但是输出结果的时间最多也就几十秒(此时文件虽然已经创建,但是改不了文件名的)。输出完结果后再进行下一步的计算,。再说一遍,计算过程中不输出文件。一共数十步。

想对该软件实时监控,以修改文件名
因为批处理简洁直观,又方便修改参数所以想到了批处理

具体要以下几个功能

第一步:每隔一定时间(例如20秒)检测软件进程是否存在(例如ansys.exe,完整的进程名,最好不是包含这个字段的进程名),如果存在执行第二步,如果不存在则延时(例如50秒)关机

第二步:检测指定路径下文件是否存在(例如D:\result\beam.txt),如果存在则将该文件改名为beam*.txt(符号“*”为第几次检测到,也就是第几个文件,加在文件名最后),这样文件就不会被覆盖了^-^。(或者另外一个txt文件中储存了文件名,文件名用回车符分隔,再从里面导入文件名),然后回到第一步。
       问题是,可能碰巧ansys.exe这个程序还没输出完beam.txt,从而无法修改文件名,如何忽略不能修改的错误,延时再修改???(或者直接判断能否修改文件名,能则修改,不能则延时修改),修改成功后回到第一步。
      
       还有一个小问题,就是如何保证最后一个结果文件也能被改名,因为最后一步算完后,输出结果,然后程序自动退出,然后检测程序进程不存在就给我关机了!!没有改名,哈哈哈


第一步的代码自己在论坛上找到一个,如下:
@echo off
tasklist|findstr /i "ansys.exe" ||shutdown -s -t 50
ping 127.1 -n 20 >nul 2>nul
call %0

美中不足的是,只是能检测到包含ansys字段的进程名

第二步实在不会了,本人对批处理只知道皮毛,希望好心人能相助!谢谢!!
谢谢版主关注!

[ Last edited by yinguangrong on 2008-12-25 at 01:12 ]

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





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

你在BATHOME提问的时候,知道把问题描述清楚。
咋到了CN-DOS就不知道了呢?



2008-12-24 18:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 3 楼』:  

可以用时间变量 %time% 生成文件名%now%,然后每隔5秒copy beam.txt %now%.txt

2008-12-24 20:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yinguangrong
新手上路





积分 1
发帖 3
注册 2008-12-23
状态 离线
『第 4 楼』:  

不能怪我啊!!!我发的时候论坛刚刚才能登陆,结果发的时候出现了错误,说没有发成功,也就没在意,网络又慢得要死!
乖乖,刚才又发了一遍才看到有同名的,结果还把刚才发的贴给删除掉了!晕死,只能在这个贴上修改修改吧!幸好有个圣明的版主,哇哈哈哈...

2008-12-25 01:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 5 楼』:  

你看这样行不行?
我还没测试。。。。
@echo off&setlocal ENABLEDELAYEDEXPANSION
set n=1

:star
ping 127.1 -n 5 >nul 2>nul
tasklist |findstr /i "ansys.exe"
if %errorlevel%==0 (
        goto exist
) else (
        goto notexist
)


:exist
ren D:\result\beam.txt d:\result\beam!n!.txt
if %errorlevel%==0 (
        set /a n=!n!+1
        goto star
) else (
        goto star
)


:notexist
goto exit


:exit
shutdown /f /s /t 50
exit


2008-12-25 10:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hqso
初级用户





积分 43
发帖 39
注册 2008-11-13
状态 离线
『第 6 楼』:  

上面兄弟的代码很清晰啊

2008-12-25 13:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yinguangrong
新手上路





积分 1
发帖 3
注册 2008-12-23
状态 离线
『第 7 楼』:  

楼上的楼上
为什么要有:notexist,直接goto到exit不行吗?
自己改了下楼上的代码,不知道怎么样?

@echo off&setlocal ENABLEDELAYEDEXPANSION
set n=1

:star
ping 127.1 -n 20 >nul 2>nul
tasklist|findstr /ic:"ansys.exe"
rem 改为20秒。同时加了个c:,版主告我的
if %errorlevel%==0 (
        goto exist
) else (
        goto exit
)


:exist
ren D:\result\beam.txt d:\result\beam!n!.txt
if %errorlevel%==0 (
        set /a n=!n!+1
        goto star
) else (
        goto star
)

:exit
ren D:\result\beam.txt d:\result\beam!n!.txt
rem 上句是为了修改最后一个输出的结果文件,此时程序已退出
shutdown /f /s /t 50
exit

[ Last edited by yinguangrong on 2008-12-25 at 14:01 ]

2008-12-25 13:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 8 楼』:  

楼上说的正确,我忘记了最后那个文件了,呵呵。
另外,goto notexist是为了方便其它新人看的,把思路写的尽量清晰,后来人看到帖子就不至于提问了。
还有,加C:的那个,应该是 findstr /i /c:"xxxx" 你掉了个/吧??

[ Last edited by exzzz on 2008-12-25 at 14:25 ]

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





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

写不写/都可以,你试试就知道了。



2008-12-25 15:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: