
En mi script VBA, escribí código para crear otro script .vbs y escribí una línea de código en ese script.
Aquí está el código:
Set a = fs.CreateTextFile("C:\Users\user\documents\invis.vbs", True)
a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")
a.Close
Creo que el código es correcto y completamente funcional; sin embargo, hay un error de sintaxis que parece que no puedo solucionar. El error está en esta línea: a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")
concretamente en esta parte: ("Wscript.Shell")
. El error de sintaxis se debe a las comillas entre Wscript.shell
.
Recibo un error de sintaxis que dice "use un separador de lista o)" con "Wscript.Shell"
resaltado.
Si elimino " ", el error de sintaxis desaparece, pero necesito "" para que el script funcione.
¿Qué puedo hacer para arreglar esto?
Respuesta1
Puede que no le guste esta respuesta, ya que utiliza JScript y no VBS. Solía tener una herramienta para convertirlos de un lado a otro, pero no tengo idea de dónde vive esa cosa ahora.
Odiamos VBS y ambos funcionan con el mismo motor WSH. VBS es útil cuando tienes que usar cosas que tienen que ver con SAFEARRAY (que es un PITA de Js). Algunas llamadas COM requieren SAFEARRAY y, aunque puede hacerlo desde JS, el código se vuelve enorme y feo en VBS, todo está envuelto bajo el capó. Un ejemplo de esto son algunas de las funciones que podría llamar para que WMI necesite SAFEARRAY para completar la lista de argumentos.
Acabo de escribir esto y funciona bien.
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();
Nuevamente, disculpas por JS pero (en mi humilde opinión) VBS es un lenguaje espantoso cuando hay una alternativa limpia que hace lo mismo.
Una cosa a tener en cuenta es que no es necesario incluir una "línea única" en el código. Hace que el código sea menos legible y no resuelve nada.