中国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 K)


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 楼』:  

参考一下这里:
http://www.cn-dos.net/forum/view ... ge=1&sid=4o7yPT

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: