关于在Vbscript中使用双引号

关于在Vbscript中使用双引号,vbscript,Vbscript,我对vb脚本有一个非常基本的疑问: Msgbox "This is myName" ' This works fine Msgbox "This is "myName"" ' This gives an error Msgbox "This is ""myName""" 'This works fine 我的问题是,如果我需要保存(在变量中)或显示带有双引号的字符串,为什么我需要对单词或短语使用双引号两次。使用常用双引号是否意味着我不想显示整个内容,或者可以保存为变量中的字符串?VB

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

Msgbox "This is myName" ' This works fine

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

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

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

VBScript中的双引号将字符串括起来。如果在字符串中插入一个双qoute,则会过早终止该字符串,其余部分将导致错误。因此,必须在字符串中转义双引号,这可以通过将双引号加倍来实现。这就是为什么第三个命令有效,而第二个命令无效。

必须对字符串文本进行分隔,以将字符串中的内容与外部内容分开。VBScript中的字符串分隔符是“(双引号)。其他语言使用“too,some have”(单引号)作为替代,或使用语义稍有不同的分隔符

若要在字符串文字中包含分隔符,必须对其进行转义(标记为不表示字符串的“结束”或“开始”。“字符串文字中”的转义标记为“.giving”-在VBscript中。 其他语言使用
\“
来转义双引号

所以


如果要显示(或存储)的内容,请选择正确的VBScript。这是“myName”

在VBScript中,字符串文字被双引号(
)包围。这是第一个示例显示的内容:

Msgbox "This is myName" ' This works fine
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 "
Msgbox "This is ""myName"""   'This works fine
但是,如果要在字符串文字中包含双引号字符,则会出现问题,因为VBScript会将找到的第二个双引号字符解释为表示字符串文字的结尾。这是第二个示例所示:

Msgbox "This is myName" ' This works fine
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 "
Msgbox "This is ""myName"""   'This works fine
幸运的是,有一个转义图案填充。它涉及到用另一个字符转义双引号字符,这表明VBScript应该将其作为文字双引号字符处理,而不是神奇的“字符串结束文字”字符。VBScript使用的转义字符恰好是双引号字符。这是第二个示例所示:

Msgbox "This is myName" ' This works fine
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 "
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
每种语言都有自己的语言。在VB/VBS中,不管是不是偶然,它都是双引号。不管是不是偶然,我们只能在文本字符串中嵌入双引号。例如,我们不能嵌入其他特殊字符作为制表符

然而,使用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"
您可以使用
替换
(如果方便的话)和其他特殊字符

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

除命令行外,vbs转义字符在vbs命令行上不起作用,
“1”“2 3”“4”
只是连接到
1 2 3 4
。这会阻止引号字符嵌套。例如,对于可执行文件,这不是问题。