如何在批处理文件中的两个双引号内放置双引号以及如何在VBA脚本文件中转义双引号

时间:2017-03-22 05:41:28

标签: vba batch-file cmd outlook-vba windows-scripting

所以我想要回显一条只包含三个双引号的行。如果我打印两个双引号它只是工作正常并打印它(我相信原因是有一个相应的结束报价)和2的倍数的双引号工作正常,但我不能回应奇数的它们。

从我的搜索中,双引号的转义序列字符本身就是双引号,它并没有给我所需的结果。

我正在运行的命令:

echo         Item.Subject = Replace(Item.Subject, """, "-")>> try.xyz

期待"""这个。

我已经尝试了

"\""
"\\""
"^""

我正在生成一个用于在Outlook中导入的bas文件。并且MC ND已经纠正了我在VBA文件中的错误,我也是这样做的。正确的方法是从VBA脚本的角度打印4个双引号来进行双引号的转义,因此正常打印4个双引号可以解决我的问题。第二个双引号是逃避第三个,第一个和最后一个是提及MC ND答案中的替换字符串。

非常感谢MC ND你已经开悟了我。 :-P

PS: MC ND给出了比这个问题更详细的解释,所以我提出了这个问题。

1 个答案:

答案 0 :(得分:3)

假设:您的批处理代码正在生成vbs个文件(或类似文件)

你的问题不是回应这三个引号。你的问题是在VBScript中,用双引号括起来的双引号需要被转义(从vbs的角度来看),为此你需要加倍它,也就是说,你不需要三个而是四个引号,这两个引号分隔字符串和两个意味着转义的双引号

>>"try.xyz" echo Item.Subject = Replace(Item.Subject, """", "-")

注意:我已将redirectioin移至行首,以避免可能以数字结尾的行出现问题,这些行可以被解析为重定向特定编号流的请求< / p>

假设:您的代码不生成vbs文件,并且您指出的引用转义。

然后你的问题是,奇数引号愚弄批量解析器,它保留一个未关闭的字符串,包括数据内部的重定向以回显,而不是写入输出文件

您可以将重定向更改为行的开头,如上一个示例中所示(在这种情况下它将起作用,echo仍然不正确),或者,您可以转义(从批处理点)视图)第一个引用因此它不被视为双引号并以正确引用的字符串结束,不包括输出中的重定向

>>"try.xyz" Item.Subject = Replace(Item.Subject, """, "-")
echo Item.Subject = Replace(Item.Subject, ^""", "-") >> "try.xyz"

rem Best use both 
>>"try.xyz" Item.Subject = Replace(Item.Subject, ^""", "-")

为什么不逃避内心的引用呢?由于它已经在带引号的字符串中,因此转义将失败。我们可以逃脱第一个或最后一个(在这种情况下),而不是内部的。

假设:您的代码未包含在批处理代码中的括号(forif,...)中

然后你的代码没有任何其他问题,但如果假设是错误的,那么还有一个问题。您正在回显的右括号将被批处理解析器视为当前块的右括号。为避免这种情况,您需要从批处理解析器的角度转义右括号。

(
....
>>"try.xyz" echo Item.Subject = Replace(Item.Subject, """", "-"^)
....
)