关于在Vbscript中使用双引号

时间:2013-04-02 17:38:43

标签: vbscript

我对vb脚本有一个非常基本的疑问:

Msgbox "This is myName" ' This works fine

Msgbox "This is "myName""  ' This gives an error

Msgbox "This is ""myName"""   'This works fine

我的问题是,如果我需要保存(在变量中)或显示带双引号的字符串,为什么我需要为单词或短语使用两次双引号。使用常见的双引号并不意味着我想显示整个事物或者可以在变量中保存为字符串吗?

4 个答案:

答案 0 :(得分:17)

在VBScript中,字符串文字用双引号(")包围。这是您的第一个示例所示:

Msgbox "This is myName" ' This works fine

但是,如果你想在你的字符串文字中包含双引号字符 ,你就会遇到问题,因为VBScript将解释它找到的第二个双引号字符,表示字符串文字的结尾。这是你的第二个例子所示:

Msgbox "This is "myName""  ' This gives an error
                       ^   ' because it prematurely terminates the string here
                           ' and doesn't know what to do with the trailing "

幸运的是,有一个逃生舱。它涉及使用另一个字符转义双引号字符,表明VBScript应该将其作为文字双引号字符处理,而不是一个神奇的“字符串结尾字符”字符。恰好,VBScript使用的转义字符是双引号字符。这是你的第二个例子所示:

Msgbox "This is ""myName"""   'This works fine
  • 您使用单个双引号开始字符串,表示字符串文字的开头。
  • 然后你想要一个嵌入的双引号字符,所以你使用其中两个。这是转义开始的地方:你转义带有另一个双引号字符的双引号字符。
  • 然后你再做那件事。
  • 最后,使用另一个双引号字符终止整个字符串文字。

其他语言通常使用反斜杠(\)作为转义字符。这可能会让事情变得更容易看到。假设VBScript使用反斜杠作为转义字符而不是双引号,您的代码将如下所示:

Msgbox "This is \"myName\""   ' doesn't work in VBScript; example only

如果这种语法困扰你,你可以为双引号声明一个常量并每次都使用它:

Const Quote = """"

' ... later in the code ...

Msgbox "This is " & Quote & "myName" & Quote

答案 1 :(得分:3)

每种语言都有自己的escape character。不管有没有,在VB / VBS中它是双引号。而且无论是否偶然,我们只能在文字字符串中嵌入双引号。例如,我们不能将其他特殊字符嵌入Tab中。

但是,使用VB / VBS转义字符可以简化我们的编码。

str = """D:\path\to\xyz.exe"" ""arg 1"" ""arg 2"""
WScript.Echo str  ' "D:\path\to\xyz.exe" "arg 1" "arg 2"

str = Chr(34) & "D:\path\to\xyz.exe" & Chr(34) & " " _
    & Chr(34) & "arg 1" & Chr(34) & " " & Chr(34) & "arg 2" & Chr(34)
WScript.Echo str  ' "D:\path\to\xyz.exe" "arg 1" "arg 2"

str = Join(Array("", "D:\path\to\xyz.exe", " ", "arg 1", " ", "arg 2", ""), Chr(34))
WScript.Echo str  ' "D:\path\to\xyz.exe" "arg 1" "arg 2"

但我个人更喜欢使用Replace,因为它使我的代码更具可读性。

str = Replace("'D:\path\to\xyz.exe' 'arg 1' 'arg 2'", Chr(39), Chr(34))
WScript.Echo str  ' "D:\path\to\xyz.exe" "arg 1" "arg 2"

您可以使用Replace(如果方便的话)和其他特殊字符。

str = Replace(Replace("A|B|C!1|2|3", "!", vbNewLine), "|", vbTab)
WScript.Echo str
'A  B   C
'1  2   3

答案 2 :(得分:1)

VBScript中的双引号括起一个字符串。如果在字符串中插入单个双qoute,它会过早地终止字符串,其余部分会导致错误。因此,你必须在字符串中转义双引号,这可以通过加倍来完成。这就是你的3 rd 命令在你的2 nd 没有的情况下工作的原因。

答案 3 :(得分:1)

必须分隔字符串文字,以便将字符串中的内容与外部内容分开。 VBScript中的字符串分隔符是“(双引号)。其他语言也使用”,有些语言使用'(单引号)作为替代,或者语义略有不同的分隔符。

要在字符串文字中包含分隔符,必须对其进行转义(标记为不代表字符串的'end'或'begin'。“in string literals中的转义标记为”。在VBscript中给出“” - 。 其他语言使用\"来逃避双引号。

所以

Msgbox "This is ""myName"""   'This works fine
x = "This is ""myName"""
如果您要显示(或存储)This is "myName"的内容,

是正确的VBScript。