Как экранировать знак равенства = в командной строке VBS - PullRequest
0 голосов
/ 15 ноября 2018

Использование VBS в Windows 2012 R2 Я пытаюсь передать параметр командной строки isActive="false", но не могу получить знак равенства в командной строке.

Создайте фиктивный командный файл, например test.bat

echo %1
Pause

Затем в созданном VBScript

 Set oShell = WScript.CreateObject("WSCript.Shell")
 oShell.CurrentDirectory = "C:\test"
 'strEqual = Chr(61)
 strCommand = "test.bat" & " " & "isActive=" &"""false"""
 return = oShell.Run(strCommand, 1, True)
 Set oShell = Nothing

я получаю isActive "false" , но без знака равенства.Я попытался выделить как уникальное значение, например & Chr(61) &, и попытался экранировать с / и \ и // и \\ до и после знака равенства.Я пытался использовать в качестве переменной strEqual = Chr(61).

Я в растерянности относительно того, как заставить = быть частью строки при передаче в командную оболочку.Я могу записать его в текстовый файл, и знак равенства пишется, но не в оболочке.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы можете передать значение из VBS в BAT / CMD, используя переменную среды процесса.

Сохраните следующий код как test.vbs:

strCurDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\"
CreateObject("WScript.Shell").Environment("process").Item("myvar") = "isActive=""false"""
CreateObject("WSCript.Shell").Run strCurDir & "test.bat"

И этот код сохраните как test.bat в той же папке:

echo %myvar%
pause

Запустите test.vbs и консольный вывод будет

C: \ Windows \ system32> echo isActive = "false"
isActive = "false"

0 голосов
/ 15 ноября 2018

Вы наблюдаете это поведение, потому что CMD использует не только пробелы и символы табуляции, но также запятые, точки с запятой и символ = в качестве разделителей параметров .Это означает, что isActive="false" анализируется как 2 различных аргумента: isActive и "false".Если вы хотите, чтобы он был проанализирован как один аргумент, вам нужно поместить всю пару ключ / значение в кавычки: "isActive=false".

Обратите внимание, что двойные кавычки внутри строковых литералов VBScript должны быть экранированы путем их удвоения.Если вам требуется двойные кавычки вокруг части значения аргумента, просто добавьте еще один набор экранированных двойных кавычек.

Set oShell = CreateObject("WScript.Shell")
strCommand = "test.bat ""isActive=""false"""""
return = oShell.Run(strCommand, 1, True)

Также нет необходимости объединять строковые литералы (за исключением случаев читабельности, когда вы хотите обернутьдлинная строка).Просто определите вашу команду как одну строку.

...