所以我想要回显一条只包含三个双引号的行。如果我打印两个双引号它只是工作正常并打印它(我相信原因是有一个相应的结束报价)和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给出了比这个问题更详细的解释,所以我提出了这个问题。
答案 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, ^""", "-")
为什么不逃避内心的引用呢?由于它已经在带引号的字符串中,因此转义将失败。我们可以逃脱第一个或最后一个(在这种情况下),而不是内部的。
假设:您的代码未包含在批处理代码中的括号(for
,if
,...)中
然后你的代码没有任何其他问题,但如果假设是错误的,那么还有一个问题。您正在回显的右括号将被批处理解析器视为当前块的右括号。为避免这种情况,您需要从批处理解析器的角度转义右括号。
(
....
>>"try.xyz" echo Item.Subject = Replace(Item.Subject, """", "-"^)
....
)