Передать строку с кавычкой в ​​приложение VB с помощью cscript.exe - PullRequest
1 голос
/ 15 ноября 2011

У меня есть сценарий VB, который принимает несколько параметров, которые могут включать пробелы, используя cscript, и я делаю вызов, используя:

nsExec::exec 'cscript.exe "$PATH_TO_FILE\program.vbs" "Something with spaces" "Something else"'

Теперь я хочу, чтобы одна из строк «Что-то еще» включаласимвол двойной кавычки, где строка

Something " else.

Я пробовал

nsExec::exec 'cscript.exe "$PATH_TO_FILE\program.vbs" "Something with spaces" "Something "" else."'

с экранированным символом ", но это не сработало, он просто использовал" Something else "в качестве строкипрошло.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2012

Вы можете прочитать всю командную строку процесса как одну строку, например, такую ​​(код JScript, извините):

// Read process command line
var WshShell = WScript.CreateObject("WScript.Shell");
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
var childProcess =
    WshShell.Exec
    (
        '"' + WshShell.Environment('PROCESS')('ComSpec') + '"'
        +
        " /C Echo \"Text lines\" && Set /p VarName="
    );
childProcess.StdOut.ReadLine();
var current_pid =
    objWMIService.ExecQuery
        (
        "Select * From Win32_Process Where ProcessId=" + childProcess.ProcessID
        );
current_pid = (new Enumerator(current_pid)).item().ParentProcessId;
if (current_pid)
{
    childProcess.StdIn.WriteLine("value");  // child process should now exit
}
else
{
    WScript.StdErr.WriteLine("Get current PID from WMI failed.");
    WScript.Quit(7);
}

var cmd_line = objWMIService.ExecQuery("Select * From Win32_Process Where ProcessID=" + current_pid);

cmd_line = (new Enumerator(cmd_line)).item().CommandLine;
WScript.Echo(cmd_line);

, но затем вам придется самостоятельно разобрать строку в отдельные аргументы.

0 голосов
/ 10 декабря 2011

По сути, нет способа справиться с этими кавычками, поэтому вам нужно обойти это решение (используйте QUOTE, а затем замените в программе на ').

...