【问题标题】:Is it possible the Serialization in .vbs script?.vbs 脚本中的序列化是否可能?
【发布时间】:2012-12-31 13:34:43
【问题描述】:

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

    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。然后您可以通过我提供给您的第二个版本检查脚本是否以该代码结尾。 这实际上取决于您希望如何处理您正在调用的脚本失败。”

为什么采用这种方法

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

【问题讨论】:

  • @Hiten004 这是个好主意吗?说如果发生错误CycleTime.vbs 那么,我可以从Main.vbs 捕获它吗?
  • 使用返回错误码到 Exist Main.vbs stackoverflow.com/questions/187040/…

标签: serialization vbscript wsh


【解决方案1】:

要扩展 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

【讨论】:

  • 我会赞成,因为检查 .Run() Function 调用的返回值是正确的解决方案,但不是在您删除 WScript 中的 spurios () 之前。退出 Sub 调用。
  • @Ekkehard.Horner 抱歉,感谢您的指正。 :)
  • @DanielCook 对于所有其他 .vbs 文件,如何编写整体代码?就像我用作示例的cycletime.vbs 一样。但是任何.vbs 文件都可能出现错误!
  • @CodeLover 我已经向您展示了如何做到这一点。您没有为某人提供足够的代码来为您编写更改。我也不认为你应该这样做。我给了你足够多的东西,你应该能够自己解决。
  • @CodeLover 我的意思是(a)检查 .Run 的返回值(由被调用的 .vbs 中的 WScript.Quit Number 设置)是可行的方法,并且(b)你不能使用参数列表() 调用 Sub 时。
【解决方案2】:

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

更多详情请点击此链接: 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)

【讨论】:

  • VBScript 不支持On Error Resume myErrCatch 类型的语法。你能告诉我为什么EXIT CODE被设置为99吗?
  • VBScript 确实支持错误处理MSDN Link with sample
  • 你可以输入任何数字。99 是一个示例。
  • 是的,我的意思是你写的方式,它可能在 VBA 中而不是在 vbscript 中?我认同! On Error Resume NextOn Error go to 0 仅受 VBScript 支持!你能用你的建议构建我的代码吗?我对如何用我的代码编写你的代码有点困惑!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多