【发布时间】:2015-07-23 08:16:57
【问题描述】:
我有一个文件夹,里面装满了几个 vbscript(比如 10 个),它们必须按顺序运行,而不是通过单击它们来运行每个我想自动化这个过程。下面是我的 master.vbs 脚本,它一个一个地运行该文件夹中的每个 vbscript。
strComputer = "."
Set objFSO = CreateObject("Scripting.FileSystemObject")
currentdirectory = objFSO.GetAbsolutePathName(".")
filedirectory = currentdirectory
Set objFolder = objFSO.GetFolder(filedirectory)
Dim filestring
Set colFiles = objFolder.Files
For Each objFile in colFiles
'Wscript.Echo objFile.Name
filestring = filestring & objFile.Name & ","
Next
'filestring = filestring.Trim().Substring(0, filestring.Length - 1)
filestring = Left(filestring,Len(filestring)-1)
Dim files
files = Split(filestring,",")
For Each f In files
'WScript.Echo f
chk = Split(f,".")
If chk(UBound(chk)) = "vbs" then
pat = filedirectory & "\" & f
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
proc = "cmd.exe /c"& Chr(32) &"cscript.exe " & Chr(32) & chr(34) & pat & Chr(34)
objWMIService.Create proc , null, null, intProcessID
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery _
("Select * From __InstanceDeletionEvent Within 1 Where TargetInstance ISA 'Win32_Process'")
Do Until i = 1
Set objLatestProcess = colMonitoredProcesses.NextEvent
If objLatestProcess.TargetInstance.ProcessID = intProcessID Then
i = 1
End If
Loop
'Wscript.Echo "Process has been terminated."
End If
Next
我在这里遇到的问题是脚本运行得很好,因为所有脚本的进程名称都是相同的 (cscript) 它不会等待一个进程在启动另一个进程之前终止。
我知道我的代码只需要稍作调整,但我不知道该怎么做。 有人能指出我在这里做错了什么吗?..
【问题讨论】:
-
愚蠢的问题,但是,你为什么要使用 wmi 来做呢?代码/问题中是否有任何原因未记录?
-
而且,问题中的文字和标题之间存在不一致。您需要终止进程还是只是确保它们一个接一个地执行?
-
@MCND 我想确保它们一个接一个地被执行,我正在考虑终止进程,以便它们不会持续存在,因为 mastervbs 将通过 cmd 提示符执行?我可能错了。目标是从主 vbs 一个接一个地运行所有 vbs。
-
我使用 wmi 的原因是为了跟踪进程,当且仅当它被终止时才启动一个新进程。
标签: vbscript wmi-service