Ошибка синтаксиса VBA при вызове объекта Shell

Ошибка синтаксиса VBA при вызове объекта Shell

В моем сценарии 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. VBS полезен, когда вам нужно использовать вещи, которые имеют дело с SAFEARRAY (который является PITA из Js). Некоторые вызовы 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 — ужасный язык, когда есть чистая альтернатива, которая делает то же самое.

Следует отметить, что в вашем коде нет необходимости в "однострочном" коде. Это делает код менее читаемым и ничего не решает.

Связанный контент