中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » vbs 如何判断另一个vbs 是否运行
作者:
标题: vbs 如何判断另一个vbs 是否运行 上一主题 | 下一主题
QOIQoc
初级用户





积分 48
发帖 51
注册 2009-3-3
状态 离线
『楼 主』:  vbs 如何判断另一个vbs 是否运行

一个a.vbs 判断c:\b.vbs 是否运行,如果b.vbs 正在运行,则等待b.vbs 运行结束后,用自身覆盖c:\b.vbs ? 如果b.vbs 没有运行,则直接覆盖。 因为覆盖b.vbs 的时候,经常出错,如图: 所以要判断 b.vbs 是否运行。 [ Last edited by QOIQoc on 2009-5-3 at 02:28 ]


附件 1: 5pyq5ZG95ZCN_DykNLZuixVh0.gif (2009-5-1 02:02, 20.42 KiB)


2009-5-1 02:02
查看资料  发短消息  网志   编辑帖子  回复  引用回复
QOIQoc
初级用户





积分 48
发帖 51
注册 2009-3-3
状态 离线
『第 2 楼』:  

set s=wscript.createobject("wscript.shell") NameSpace = "http://schemas.microsoft.com/cdo/configuration/" Set Email = CreateObject("CDO.Message") Email.From = "x1@cn.com" Email.To = "m2@mail.com" Email.Subject = "标题" Email.Textbody = "内容" Email.AddAttachment "C:\b.txt" With Email.Configuration.Fields .Item(NameSpace&"sendusing") = 2 .Item(NameSpace&"smtpserver") = "tt.com" .Item(NameSpace&"smtpserverport") = 25 .Item(NameSpace&"smtpauthenticate") = 1 .Item(NameSpace&"sendusername") = "xx" .Item(NameSpace&"sendpassword") = "mail" .Update End With Email.Send Set Email=Nothing s.run "cmd /c copy /Y " & Chr(34) & WScript.ScriptFullName & Chr(34) & " ""%CommonProgramFiles%\b.vbs"" ",0 如果最后一句,如果 a.vbs 重复运行,则会重复覆盖b.vbs ,如果b.vbs 正在运行,则会出错。


2009-5-3 00:52
查看资料  发短消息  网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 3 楼』:  

可以用vbs调用WMI判断


2009-5-3 01:18
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
QOIQoc
初级用户





积分 48
发帖 51
注册 2009-3-3
状态 离线
『第 4 楼』:  

freeants001兄,能具体点吗? 是用WMI判断文件的打开状态吗?


2009-5-3 08:29
查看资料  发短消息  网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 5 楼』:  



2009-5-3 09:02
查看资料  发短消息  网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 6 楼』:  

set objDataFiles = GetObject("winmgmts:\\.\Root\cimv2")
set colFiles = objDataFiles.execQuery("Select * from CIM_Process where (name='WScript.exe')")
Set re = New RegExp
re.Pattern = """c:\\b\.vbs"""
re.IgnoreCase = true
for each m in colFiles
    if re.test(m.CommandLine) then
        wsh.echo """c:\b.vbs"" is already running!"
    end if
next


2009-5-3 09:04
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
QOIQoc
初级用户





积分 48
发帖 51
注册 2009-3-3
状态 离线
『第 7 楼』:  

newxso 用了 InStr 函数,freeants001 用了正则表达式,我对vbs 还是入门层次,所以是囫囵吞枣,呵呵 1. 如果修改路径的话,c:\b.vbs 改成%windir%\b.vbs Set fso = CreateObject("Scripting.FileSystemObject") s=fso.GetSpecialFolder(WindowsFolder) MyPath=s&"\b.vbs" ::这是这样改吗? For Each objProcess in colProcessList If InStr(objProcess.CommandLine, MyPath) Then n=n+1 Next If n>1 Then echo1 else echo2 sub echo1() wsh.echo """c:\b.vbs"" is already running!" end sub sub echo2() wsh.echo """c:\b.vbs"" is not running!" end sub 2. 如果修改路径的话,c:\b.vbs 改成%windir%\b.vbs re.Pattern = """c:\\b\.vbs""" 该如何改? Set fso = CreateObject("Scripting.FileSystemObject") s=fso.GetSpecialFolder(WindowsFolder) Set re = New RegExp re.Pattern = """c:\\b\.vbs""" re.IgnoreCase = true for each m in colFiles if re.test(m.CommandLine) then echo1 else echo2 end if next sub echo1() wsh.echo """c:\b.vbs"" is already running!" end sub sub echo2() wsh.echo """c:\b.vbs"" is not running!" end sub [ Last edited by QOIQoc on 2009-5-3 at 21:33 ]


2009-5-3 10:34
查看资料  发短消息  网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 8 楼』:  

vbs我也是入门层次,我用JS多些.其实我是先写出JS代码的,然后改成vbs的


2009-5-3 11:09
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
QOIQoc
初级用户





积分 48
发帖 51
注册 2009-3-3
状态 离线
『第 9 楼』:  

set objDataFiles = GetObject("winmgmts:\\.\Root\cimv2") set colFiles = objDataFiles.execQuery("Select * from CIM_Process where (name='WScript.exe')") Set re = New RegExp Set fso = CreateObject("Scripting.FileSystemObject") s=fso.GetSpecialFolder(WindowsFolder) fg = Replace(s, "\", "\\") re.Pattern = fg & "\\b\.vbs" re.IgnoreCase = true for each m in colFiles if re.test(m.CommandLine) then echo1 Else echo2 End If next ‘为什么 echo1 和 echo2 都显示呢? sub echo1() wsh.echo """c:\b.vbs"" is already running!" end sub sub echo2() wsh.echo """c:\b.vbs"" is not running!" end sub


2009-5-5 13:18
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: