呼叫 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 是一種可怕的語言。

需要注意的一件事是,程式碼中不需要「一行」。它使程式碼的可讀性降低並且解決不了任何問題。

相關內容