![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 21:31 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » vbs 如何判断另一个vbs 是否运行 |
| 可打印版本 891 / 8 |
| 第1楼 QOIQoc | 发表于 2009-05-01 02:02 |
| 初级用户 发帖 51 积分 48 | |
|
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 ] 附件 5pyq5ZG95ZCN_DykNLZuixVh0.gif (20.42 KiB) |
|
| 第2楼 QOIQoc | 发表于 2009-05-03 00:52 |
| 初级用户 发帖 51 积分 48 | |
|
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楼 freeants001 | 发表于 2009-05-03 01:18 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
|
可以用vbs调用WMI判断
|
|
| 第4楼 QOIQoc | 发表于 2009-05-03 08:29 |
| 初级用户 发帖 51 积分 48 | |
|
freeants001兄,能具体点吗?
是用WMI判断文件的打开状态吗? |
|
| 第5楼 newxso | 发表于 2009-05-03 09:02 |
| 初级用户 发帖 101 积分 73 来自 GZ | |
| 第6楼 freeants001 | 发表于 2009-05-03 09:04 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
| 第7楼 QOIQoc | 发表于 2009-05-03 10:34 |
| 初级用户 发帖 51 积分 48 | |
|
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楼 freeants001 | 发表于 2009-05-03 11:09 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
|
vbs我也是入门层次,我用JS多些.其实我是先写出JS代码的,然后改成vbs的
![]() |
|
| 第9楼 QOIQoc | 发表于 2009-05-05 13:18 |
| 初级用户 发帖 51 积分 48 | |
|
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 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |