
在我的 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 是一種可怕的語言。
需要注意的一件事是,程式碼中不需要「一行」。它使程式碼的可讀性降低並且解決不了任何問題。