使用cscript.exe将带有引号的字符串传递到VB应用程序中

时间:2011-11-15 18:32:28

标签: command-line vbscript escaping wsh

我有一个VB脚本,它接受了几个可以包含使用cscript的空格的参数,并且我使用以下命令进行调用:

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

现在,我希望其中一个“Something”字符串包含双引号字符,其中字符串是

Something " else.

我试过了

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

有一个转义“但是没有用,它只是使用了”其他东西“作为传入的字符串。

2 个答案:

答案 0 :(得分:0)

基本上,没有办法处理这些引号,所以你需要一个解决方法(使用QUOTE然后在程序中替换')。

答案 1 :(得分:0)

您可以将整个流程命令行读取为一个这样的字符串(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);

但是你必须自己将字符串解析为单独的参数。