将包含双引号的字符串从node.js脚本传递到VBScript

时间:2018-07-23 20:27:11

标签: javascript node.js vbscript

我有一个node.js脚本,该脚本调用VBScript,并将字符串作为参数传递。

master.js:

'use strict';

var str = 'This string contains "double quotes".';
console.log("In JS: " + str);

const
    spawn = require( 'child_process' ).spawnSync,
    vbs = spawn( 'cscript.exe', [ 'slave.vbs', str ] );

console.log("In VBScript: " + `${vbs.stdout.toString()}` );

slave.vbs:

Option Explicit

If 0 < WScript.Arguments.Count Then 
Dim str : str = WScript.Arguments(0)
End If

Wscript.Stderr.WriteLine str

控制台输出:

  

在JS中:此字符串包含“双引号”。

     

在VBScript中:此字符串包含\ double

这不好,我需要它们保持一致。经过一些研究,我发现VBScript的转义字符是双引号本身。因此,如果我想要在VBScript中包含双引号的字符串文字,则必须这样声明:

Dim str : str = "This string contains ""double quotes""."

考虑到这一点,我更改了master.js代码:

'use strict';

var str = 'This string contains ""double quotes"".';
console.log("In JS: " + str);

const
    spawn = require( 'child_process' ).spawnSync,
    vbs = spawn( 'cscript.exe', [ 'slave.vbs', str ] );

console.log("In VBScript: " + `${vbs.stderr.toString()}` );

新控制台输出:

  

在JS中:此字符串包含“双引号”。

     

在VBScript中:此字符串包含\\双引号\\。

还是不好。我怎样才能正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以编写一个显式的chr()调用:

var str ='This string contains' & chr(34) & 'double quotes' & chr(34) &'.';