调用 Shell 对象的 VBA 语法错误

调用 Shell 对象的 VBA 语法错误

在我的 VBA 脚本中,我编写了代码来创建另一个 .vbs 脚本并向该脚本写入一行代码。

以下是代码:

Set a = fs.CreateTextFile("C:\Users\user\documents\invis.vbs", True)
    a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")
    a.Close

我相信代码全部正确并且功能齐全,但是有一个语法错误我似乎无法修复。错误出现在此行:a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")具体来说,出现在此部分:("Wscript.Shell")。语法错误是由于 周围的引号造成的Wscript.shell

我收到一个语法错误,其中突出显示“使用列表分隔符或)” "Wscript.Shell"

如果我删除“”,语法错误就消失了,但我需要“”才能使脚本正常工作。

我该如何修复此问题?

答案1

您可能不喜欢这个答案,因为它使用的是 JScript 而不是 VBS。我以前有一个工具可以将它们相互转换,但我不知道那个东西现在在哪里。

我们讨厌 VBS,两者都通过相同的 WSH 引擎运行。当您必须使用处理 SAFEARRAY 的东西时(对于 Js 来说,这是一个 PITA),VBS 很有用。一些 COM 调用需要 SAFEARRAY,虽然您可以从 JS 中执行此操作,但代码会变得庞大而丑陋,而在 VBS 中,它全部包装在引擎盖下。一个例子是您可能为 WMI 调用的一些函数需要 SAFEARRAY 来填充参数列表。

我刚刚写了这个并且运行良好。

var oFso = new ActiveXObject("Scripting.FileSystemObject");
var oTextFile = oFso.CreateTextFile("C:\\Users\\user\\documents\\invis.js", true);
oTextFile.WriteLine("var oShell = new ActiveXObject(\"WScript.Shell\");");
oTextFile.WriteLine("oShell.Run( WScript.arguments(0), 0, false )" );
oTextFile.Close();

再次,对 JS 表示歉意,但(在我看来)当有一个干净的替代品可以做同样的事情时,VBS 是一种可怕的语言。

需要注意的一点是,代码中不需要“一行代码”。它使代码的可读性降低,而且不能解决任何问题。

相关内容