【问题标题】:How to put a double quote within two double quotes in a batch file and how to escape double quote in VBA script file如何在批处理文件中的两个双引号内放置双引号以及如何在 VBA 脚本文件中转义双引号
【发布时间】:2017-03-22 05:41:27
【问题描述】:

所以我想回显一行只包含三个双引号。如果我打印两个双引号,它就可以正常工作并打印它(我相信原因是有一个相应的结束引号)并且 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 给出了比这个问题应得的更详细的解释,所以我扩展了这个问题。

【问题讨论】:

  • 发布您的代码示例
  • 转义 ) 右括号:echo Item.Subject = Replace(Item.Subject, ^""", "-"^) 结果到 Item.Subject = Replace(Item.Subject, """, "-") 但是目标语言很重要:例如,要获得有效的 VBScript 代码 sn-p,请使用 echo Item.Subject = Replace(Item.Subject, """", "-"^)跨度>
  • 我实际上想创建一个 VBScript 行,它说用 - 替换每次出现的 "。所以我认为等效代码是 Item.Subject = Replace(Item.Subject, """, "-")。如果我错了,请纠正我。谢谢

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


【解决方案1】:

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

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

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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多