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

How to put a double quote within two double quotes in a batch file and how to escape double quote in VBA script file

所以我想回显仅包含三个双引号的一行。如果我打印两个双引号,它就可以正常工作并打印它(我相信原因是有一个相应的结束引号)并且 2 的倍数的双引号工作得很好,但我无法回应奇数个。

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

我的命令是运行:

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

期待"""

我试过了

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

我正在生成用于在 Outlook 中导入的 bas 文件。 MC ND 更正了我在生成的 VBA 文件中的错误。正确的方法是打印 4 个双引号以从 VBA 脚本的角度对双引号进行转义,因此正常打印 4 个双引号可以解决我的问题。第二个双引号是为了转义第三个,第一个和最后一个是提到 MC ND 答案中的替换字符串。

非常感谢MC ND你启发了我。 :-P

PS: MC ND 对这个问题给出了比应得的更详细的解释,所以我扩展了这个问题。

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

你的问题是不回显三个引号。您的问题是,在 VBScript 中,需要转义包含在双引号中的双引号(从 vbs 的角度来看),为此您需要将其加倍,也就是说,您需要的不是三个而是四个引号,其中两个分隔字符串和两个表示转义双引号的字符串

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

注意:我已将 redirectioin 移动到行的开头,以避免可能以数字结尾的行出现问题,这些数字可能被解析为重定向特定请求的请求编号流


假设:您的代码不会生成 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, """", "-"^)
....
)