中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 18:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » vbs 如何判断另一个vbs 是否运行 查看 888 回复 8
楼 主 vbs 如何判断另一个vbs 是否运行 发表于 2009-05-01 02:02 ·  中国 北京 联通
初级用户
★★
积分 48
发帖 51
注册 2009-03-03 23:23
17年会员
UID 140498
性别 女
状态 离线
一个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 ]
附件
5pyq5ZG95ZCN_DykNLZuixVh0.gif
2 发表于 2009-05-03 00:52 ·  中国 北京 联通
初级用户
★★
积分 48
发帖 51
注册 2009-03-03 23:23
17年会员
UID 140498
性别 女
状态 离线
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 正在运行,则会出错。
3 发表于 2009-05-03 01:18 ·  中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
可以用vbs调用WMI判断
4 发表于 2009-05-03 08:29 ·  中国 北京 联通
初级用户
★★
积分 48
发帖 51
注册 2009-03-03 23:23
17年会员
UID 140498
性别 女
状态 离线
freeants001兄,能具体点吗?
是用WMI判断文件的打开状态吗?
5 发表于 2009-05-03 09:02 ·  中国 广东 广州 电信
初级用户
★★
l i u s s
积分 73
发帖 101
注册 2008-09-17 00:21
17年会员
UID 125825
性别 男
来自 GZ
状态 离线
6 发表于 2009-05-03 09:04 ·  中国 湖北 黄石 阳新县 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
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
7 发表于 2009-05-03 10:34 ·  中国 北京 联通
初级用户
★★
积分 48
发帖 51
注册 2009-03-03 23:23
17年会员
UID 140498
性别 女
状态 离线
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 ]
8 发表于 2009-05-03 11:09 ·  中国 湖北 黄石 阳新县 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
vbs我也是入门层次,我用JS多些.其实我是先写出JS代码的,然后改成vbs的
9 发表于 2009-05-05 13:18 ·  中国 北京 丰台区 联通
初级用户
★★
积分 48
发帖 51
注册 2009-03-03 23:23
17年会员
UID 140498
性别 女
状态 离线
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
论坛跳转: