为什么我的sricpt开始2个记事本?

时间:2017-01-27 11:57:15

标签: foreach vbscript do-while

为什么我的脚本在没有等待用户关闭第一个记事本的情况下启动两个记事本实例?我希望我的脚本打开一个文本文件,而不是在打开下一个记事本之前等待关闭记事本。

set service = GetObject ("winmgmts:")
Dim ArchiveList
Dim ExportTool
Dim running

ExportTool = "notepad.exe "    
ArchiveList = Array("A.txt","b.txt")

For Each element In ArchiveList
    Dim objShell
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run(ExportTool & element)
    running = true
    WScript.Sleep 3000

    Do while running
        running = false
        for each Process in Service.InstancesOf ("Win32_Process")
            If Process.Name = ExportTool then
                running = true
            End If
        next
    Loop
    MsgBox "Hallo Erdling", VBOKOnly, "Muhaha"
    ' not running
Next

我不明白为什么这不起作用。

2 个答案:

答案 0 :(得分:1)

running永远不会被True循环设置为For Each Process,因为由于额外的空间,将无法在服务列表中找到ExportTool值。

删除空格并将其添加到连接ExportToolelement值的位置:

set service = GetObject ("winmgmts:")
Dim ArchiveList
Dim ExportTool
Dim running

ExportTool = "notepad.exe"    ' remove trailing space
ArchiveList = Array("A.txt","b.txt")

For Each element In ArchiveList
    Dim objShell
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run(ExportTool & " " &  element) ' add space
    running = true
    WScript.Sleep 3000

    Do while running
        running = false
        for each Process in Service.InstancesOf ("Win32_Process")
            If Process.Name = ExportTool then
                running = true
            End If
        next
    Loop
    MsgBox "Hallo Erdling", VBOKOnly, "Muhaha"
    ' not running
Next

现在应该工作。

答案 1 :(得分:-1)

由于

ArchiveList = Array("A.txt","b.txt")

创建一个包含两个元素的数组,以便循环以

开头
For Each element In ArchiveList

将运行element =“A.txt”和element =“B.txt”和

objShell.Run(ExportTool & element)

将为每个文本文件运行.Run Notepad.exe。