
내 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
이 답변은 VBS가 아닌 JScript를 사용하므로 마음에 들지 않을 수 있습니다. 나는 그것들을 앞뒤로 변환하는 도구를 가지고 있었지만 지금은 그것이 어디에 있는지 전혀 모릅니다.
우리는 VBS를 싫어하며 둘 다 동일한 WSH 엔진을 통해 실행됩니다. VBS는 SAFEARRAY(Js의 PITA)를 처리하는 작업을 사용해야 할 때 유용합니다. 일부 COM 호출에는 SAFEARRAY가 필요하며 JS에서 이를 수행할 수 있지만 VBS에서는 코드가 거대하고 추악해지며 모두 내부적으로 포장됩니다. 이에 대한 한 가지 예는 인수 목록을 채우기 위해 SAFEARRAY가 필요한 WMI에 대해 호출할 수 있는 일부 함수입니다.
방금 이 글을 썼는데 잘 작동합니다.
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에 대해 사과드립니다. 그러나 (IMHO) VBS는 동일한 작업을 수행하는 깨끗한 대안이 있는 경우 무시무시한 언어입니다.
한 가지 관찰해야 할 점은 코드에 "하나의 라이너"가 필요하지 않다는 것입니다. 코드를 읽기 어렵게 만들고 아무것도 해결하지 못합니다.