是否可以在.vbscript中进行序列化?

时间:2012-12-31 13:34:43

标签: serialization vbscript wsh

我已将部分代码合并到下面:

    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或让执行继续。

如同丹尼尔

“如果不是oShell.run(”CycleTime.vbs“,1,True)= 0则Wscript.Quit将替换您当前用于在Main.vbs中调用”CycleTime.vbs“的行

如果oShell.run(“CycleTime.vbs”,1,True)= 99,那么Wscript.Quit也会替换您当前用来调用“CycleTime.vbs”的行。 不同之处在于您没有指定CycleTime.vbs如何出错。 如果它可能以一种运行时错误并且只是停止执行的方式失败,那么您可能希望使用第一个选项。 如果发生错误,您使用错误捕获进行陷阱,则可以使用代码退出。和WScript.Quit 99一样。然后你可以通过我提供给你的第二个版本检查脚本是否以该代码结束。 这实际上取决于您希望如何处理您正在调用的脚本失败。“

为什么这样的方法

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

更多detial请点击此链接: VBScript -- Using error handling

样品:

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

myErrCatch:
'log error
Resume Next

从.VBS创建Exist code,然后退出Main.vbs

DIM returnValue
 returnValue = 99
 WScript.Quit(returnValue)