首页 > 解决方案 > 将包含双引号的字符串从 node.js 脚本传递到 VBScript

问题描述

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

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()}` );

从属.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 中:此字符串包含 \\双引号\\。

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

标签: javascriptnode.jsvbscript

解决方案


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

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

推荐阅读