在我的 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 是一种可怕的语言。
需要注意的一点是,代码中不需要“一行代码”。它使代码的可读性降低,而且不能解决任何问题。