中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]关于等待执行批处理文件或程序的语法
作者:
标题: [求助]关于等待执行批处理文件或程序的语法 上一主题 | 下一主题
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『楼 主』:  [求助]关于等待执行批处理文件或程序的语法

各位大虾好!

   偶是批处理菜鸟,请多指教……偶用的是WIN2000系统,在WINDOWS下执行批处理文件。
   现有一问题请教:偶想用批处理文件启动一个程序后再执行其它操作和执行另外一个程序或批处理文件,但是前提是这第一个程序完全启动后才执行其它操作的,偶知道START命令有一个WAIT函数,可是不知道怎样用,帮助说得特简单,等于没说,所以偶现在以实例请教……

   目的:用批处理文件启动d:\123\abc.exe,因为这个应用程序启动大概要1分钟左右,所以想在这个程序abc.exe完全启动之后再自动复制文件copy c:\456\777.txt d:\123\888.txt,再接着运行一个批处理文件或程序d:\789\000.bat或d:\789\000.exe(在这里是想知道接着运行批处理和程序有什么区别?调用命令是不是一样的?)

@echo off
start d:\123\abc.exe
这一行不知道怎么写了,用另外一个命令还是用WAIT函数?
copy c:\456\777.txt d:\123\888.txt
start d:\789\000.exe
start d:\789\000.bat(可否在这里用 start命令调用这另外一个批处理文件?)
exit

请指教------万分感谢!!!

2006-6-30 16:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

@echo off
start /wait d:\123\abc.exe
copy c:\456\777.txt d:\123\888.txt
start d:\789\000.exe
call d:\789\000.bat(可否在这里用 start命令调用这另外一个批处理文件?)
exit

2006-6-30 16:57
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『第 3 楼』:  

非常感谢bagpipe……偶试试,

2006-7-1 08:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『第 4 楼』:  

不好意思,偶试了一下,是偶上次没有说清楚,bagpipe, i am sorry!
偶是想完全启动一个程序后再执行其它语句操作的,但后续操作并不是等这个程序关闭了再执行的,所以用start /wait 参数是不能实现的,就是说只要等这个程序启动完成后就执行其它命令,但是不管它这一次启动后是否还在运行,程序较大,所以启动需要时间,是否可以加上一个判断这个程序是否已经启动成功的命令呢? 程序启动和程序正常运行时可否有命令来判断?谢谢……

2006-7-11 14:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  如果这个程序完全启动之后,会生成临时文件什么的就比较好办了。请提供你这个程序完全启动之后的表现再说吧,主要是看是不是生成了什么临时文件,或者是改写了什么注册表项。

2006-7-11 15:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『第 6 楼』:  

是否产生临时文件偶不太清楚,关键是这个软件是应用程序,只知道启动过程中就会改写一个注册表项的键值,把键值改为当前启动的小时的,比如昨天启动过,键值是“2006,0,7,1,0,1234567,89,0”,今天启动于10点*分,就改成"2006,0,7,1,1,1234567,89,0",启动完成前这个键值也就改了,这个键值也不是只有日期时间的,还有其它的数值一起作为键值的,你看后面的1234567,89,……
请楼上的 namejm指教……

[ Last edited by flying008 on 2006-7-11 at 16:06 ]

2006-7-11 15:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 7 楼』:  

  一定要完全启动之后才生成某个临时文件或者改写某处注册表项才行,如果不是这样,就没法判断程序是否完全启动了。其基本思想是用 if exist 某个临时文件 或者用 reg query 配合find来查询某个注册表内容是否存在 来决定下一步的操作,如果存在,则进行指定操作,如果不存在,则重复上一步查询语句,直到指定的内容存在为止。
  你再跟踪一下这个程序启动情况吧,如果实在没有完全启动的标志,则我也没什么好的办法了。

2006-7-11 18:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  

以下只要没有进程abc.exe或000.exe循环延迟五秒

  1. @echo off
  2. d:\123\abc.exe
  3. :wait_1
  4. ping/n 5 127.1>nul
  5. wmic process list status|find /i "abc.exe"
  6. if not errorlevel 1 goto wait_1
  7. copy c:\456\777.txt d:\123\888.txt
  8. d:\789\000.exe
  9. :wait_2
  10. ping/n 5 127.1>nul
  11. wmic process list status|find /i "000.exe"
  12. if not errorlevel 1 goto wait_2
  13. call d:\789\000.bat(可否在这里用 start命令调用这另外一个批处理文件?)
  14. exit
        DOS一跟葱:发表于 2006-07-11  19:12

2006-7-11 19:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  

错了,应该这样
@echo off
d:\123\abc.bat
rem abc.bat内容是d:\123\abc.exe
:wait_1
ping/n 5 127.1>nul
wmic process list status|find /i "abc.exe"
if errorlevel 1 goto wait_1
copy c:\456\777.txt d:\123\888.txt
d:\789\000.bat
rem 000.bat内容是d:\789\000.exe
:wait_2
ping/n 5 127.1>nul
wmic process list status|find /i "000.exe"
if errorlevel 1 goto wait_2
call d:\789\000.bat(可否在这里用 start命令调用这另外一个批处理文件?)
exit
[ Last edited by fastslz on 2006-7-11 at 20:01 ]

2006-7-11 19:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『第 10 楼』:  

谢谢……再试试,
请教fastslz,偶的系统是WIN2000sp4,这个 WMIC命令不能用啊?请问可否用其它命令代替?

[ Last edited by flying008 on 2006-7-12 at 11:39 ]

2006-7-12 08:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
IceCrack
中级用户

DOS之友


积分 332
发帖 168
注册 2005-10-6
来自 天涯
状态 离线
『第 11 楼』:  

请教dos一根葱 为什么这里用到一个ping 只是起到一个延时的作用吗?
wmic process list status  这个我觉得可以换成tasklist吧。tasklist在xp sp2下是可用的。不知道2000是否支持

2006-7-12 13:29
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (369525996)  编辑帖子  回复  引用回复
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『第 12 楼』:  

tasklist偶从里copy到WIN2000中试了一下,提示要XP或更新版本才能运行的,不知在2000下可有其它命令查看和探测系统进程的,

2006-7-12 14:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by IceCrack at 2006-7-12 13:29:
请教dos一根葱 为什么这里用到一个ping 只是起到一个延时的作用吗?
wmic process list status  这个我觉得可以换成tasklist吧。tasklist在xp sp2下是可用的。不砮..

应该说借助ping 起到一个延时的作用。
是啊tasklist也好用,我之前只知道用wmic process list status,发现这2个命令非常相似哦

to flying008
我传一个wmic,试试2000下好用吗

2006-7-12 18:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
IceCrack
中级用户

DOS之友


积分 332
发帖 168
注册 2005-10-6
来自 天涯
状态 离线
『第 14 楼』:  

哦 我仔细的看了一下xp的命令行参考,发现tasklist是新的 Windows XP Professional 命令行工具。不好意思了

2006-7-13 07:19
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (369525996)  编辑帖子  回复  引用回复
flying008
中级用户





积分 245
发帖 103
注册 2006-6-30
状态 离线
『第 15 楼』:  

偶COPY楼上的WMIC程序到SYSTEM32\WBEM\里面后运行,提示”程序无法找到入口“:无法定位程序输入点IcmpSendEcho于动态链接库iphlpapi.dll上,而WIN2000有这个 DLL的,只是大小与XP不一样,偶复制XP的这个DLL过来到WIN2000里,WIN2000提示进程正在使用此文件,不能复制。

2006-7-13 09:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: