0

我已将我的一些代码合并到以下内容中:

    Option Explicit

    Dim oShell : Set oShell = WScript.CreateObject ("WScript.Shell")
    Dim FSO : set FSO = CreateObject("Scripting.FileSystemObject") 
    Dim StartTime,Elapsed 

    'msgBox(oShell.CurrentDirectory)
    'MsgBox(FSO.GetFile(Wscript.ScriptFullName).ParentFolder )
    oShell.CurrentDirectory = FSO.GetFile(Wscript.ScriptFullName).ParentFolder

    StartTime = Timer

    oShell.run "ParentChildLinkFinal.vbs", 1, True
    oShell.run "Parent_Child_Merge_final.vbs", 1, True
    oShell.run "CycleTime.vbs", 1, True
    oShell.run "Baddata.vbs", 1, True
    oShell.run "Matrixrefresh.vbs", 1, True

    Elapsed = Timer - StartTime

    MsgBox("Total time taken to finish this task:" & Elapsed & "in Seconds")

现在这里的一个问题是 - 假设任何文件中发生错误CycleTime.vbs,但控件然后转到下一个Baddata.vbs文件,而不杀死文件。Main.vbs那么如何处理这个,如果发生错误,停止main.vbs那里本身或让执行继续。

根据丹尼尔

"IF NOT oShell.run("CycleTime.vbs", 1, True) = 0 then Wscript.Quit 将替换您当前用于在 Main.vbs 中调用“CycleTime.vbs”的行

IF oShell.run("CycleTime.vbs", 1, True) = 99 then Wscript.Quit 还将替换您当前用于调用“CycleTime.vbs”的行。不同之处在于您没有指定 CycleTime.vbs 如何出错。如果它可能以出现运行时错误并停止执行的方式失败,您将需要使用第一个选项。如果发生错误,即您使用错误捕获进行捕获,您可以使用代码退出。就像 WScript.Quit 99。然后您可以通过我提供给您的第二个版本检查脚本是否以该代码结尾。这真的取决于你想如何处理你正在调用的脚本的失败。”

为什么采用这种方法

@DanielTrue帮助脚本暂停执行,直到当前 .vbs 完成。但是我正在寻找任何特殊值,如果我可以从每个 .vbs 返回一个特殊值,通过它main.vbs可以知道它当前的 .vbs 已成功完成,让我们开始下一个 .vbs 。但是是的,如果只有成功,那么下一个将开始。目前我看到假设任何.vbs都发生错误,然后一旦我关闭错误窗口,下一个脚本就开始运行。因此,我正在尝试至少思考是否可以将任何成功的完整通信发送到main.vbs. 那么有可能吗?

4

2 回答 2

2

要扩展 Hiten 指示的内容,您需要在 Main.vbs 中检查调用的 .vbs 文件的返回值。您可以利用Run 的返回值来做到这一点。

例如:

而不是oShell.run "CycleTime.vbs", 1, True

IF NOT oShell.run( "CycleTime.vbs", 1, True) = 0 then Wscript.Quit

如果由于运行时错误而暂停,这将退出您当前的执行线程CycleTime.vbs(运行脚本的调用将返回 false)。

现在,如果您能够在 CycleTime.vbs 中优雅地处理错误,则可以在关闭它时发送一条消息,Wscript.Quit code如另一个答案中所述。

因此,如果您想在 CycleTime.vbs 中优雅地处理错误,您仍然可以指示发生了错误。只需使用以下内容检查主脚本中的返回代码:

IF oShell.run( "CycleTime.vbs", 1, True) = 99 then Wscript.Quit

这样,如果CycleTime.vbs以代码 99 结尾,您的脚本将结束。如果在 CycleTime.vbs 中具有如下代码,则会发生这种情况:

If err then
    'Exit script with code 99 to indicate an error occurred.
    Wscript.Quit 99
End if
于 2012-12-31T21:52:53.030 回答
1

在 main.vbs 中使用 vbscript 错误处理来停止代码并退出 main.vbs

有关详细信息,请单击此链接: VBScript -- 使用错误处理

样本:

On Error Resume myErrCatch
'Do step 1
'Do step 2
'Do step 3

myErrCatch:
'log error
Resume Next

从 .VBS创建一个Exist 代码,然后退出 Main.vbs

DIM returnValue
 returnValue = 99
 WScript.Quit(returnValue)
于 2012-12-31T14:12:28.497 回答