【问题标题】:How to run a VBScript from within another VBScript, without creating a new process?如何在不创建新进程的情况下从另一个 VBScript 中运行 VBScript?
【发布时间】:2020-03-24 18:52:22
【问题描述】:

我正在尝试从另一个 VBScript 中运行 VBScript,而不创建新进程。我可以像这样使用 Powershell 来做到这一点:

主脚本:

# some main script code here
"&'$scriptPath'" | Invoke-Expression
# some main script code here

在 Powershell 中,上述命令运行 $scriptPath 内的 PowerShell 代码,就好像它是主脚本的一部分,即在同一个进程中运行它。

我想使用 VBScript 来实现。
我在网上搜索并知道objShell.Run "<scriptPath>",但是这个命令在不同的进程中运行<scriptPath> 中的代码,而不是好像它是主脚本的一部分。 我也知道读取文件内容并执行它的选项,但如果可能的话,我不希望这样做。

如何使用 VBScript 来实现?

【问题讨论】:

标签: vbscript


【解决方案1】:

您需要查看 VBScript 的 Eval 函数以及 Execute 和 ExecuteGlobal 语句。例如:

Option Explicit

Dim a : a = 8
Dim b : b = 13

' Dynamically inject a new GetSum() Function into this script...
Execute "Function GetSum(ByVal x, ByVal y) : GetSum = x + y : End Function"

' Dynamically call GetSum() with in-script variables and store the result...
Dim result : result = Eval("GetSum(" & CStr(a) & ", " & CStr(b) & ")")

WScript.Echo result

从上面可以看出,字符串是在进程内执行和评估的,无需运行单独的进程或读取单独的文件。

为了将来的维护工作和更易读的脚本,我可能建议使用 .wsf 脚本文件而不是 .vbs,并在 <resource id="x">...</resource> 元素中放置更大的字符串块,然后使用 getResource("x") 读取字符串

希望这些信息对您有所帮助。

【讨论】:

  • 这种方法的问题是评估字符串中的语法错误会使程序崩溃。如果未包装在错误处理程序中,运行时错误也会使程序崩溃。使用 MSScript 控件可以捕获语法错误。请参阅链接social.msdn.microsoft.com/Forums/en-US/… 了解如何操作。
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2016-11-23
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多