标题: vbs 如何判断另一个vbs 是否运行
[打印本页]
作者: QOIQoc
时间: 2009-5-1 02:02
标题: 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)
作者: QOIQoc
时间: 2009-5-3 00:52
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 正在运行,则会出错。
作者: freeants001
时间: 2009-5-3 01:18
可以用vbs调用WMI判断
作者: QOIQoc
时间: 2009-5-3 08:29
freeants001兄,能具体点吗?
是用WMI判断文件的打开状态吗?
作者: newxso
时间: 2009-5-3 09:02
参考一下这里:
http://www.cn-dos.net/forum/view ... ge=1&sid=4o7yPT
作者: freeants001
时间: 2009-5-3 09:04
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
作者: QOIQoc
时间: 2009-5-3 10:34
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 ]
作者: freeants001
时间: 2009-5-3 11:09
vbs我也是入门层次,我用JS多些.其实我是先写出JS代码的,然后改成vbs的

作者: QOIQoc
时间: 2009-5-5 13:18
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