我对vb脚本有一个非常基本的疑问:
Msgbox "This is myName" ' This works fine
Msgbox "This is "myName"" ' This gives an error
Msgbox "This is ""myName""" 'This works fine
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我需要保存(在变量中)或显示带双引号的字符串,为什么我需要为单词或短语使用两次双引号.使用常见的双引号并不意味着我想显示整个事物或者可以在变量中保存为字符串吗?
Cod*_*ray 20
在VBScript中,字符串文字由双引号(")括起来.这是您的第一个示例显示的内容:
Msgbox "This is myName" ' This works fine
Run Code Online (Sandbox Code Playgroud)
不过,如果你想包括一个双引号字符内的字符串字面的,你有一个问题,因为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 "
Run Code Online (Sandbox Code Playgroud)
幸运的是,有一个逃生舱.它涉及用另一个字符转义双引号字符,表明VBScript应该将它作为文字双引号字符处理,而不是一个神奇的"字符串结尾字符"字符.恰好,VBScript使用的转义字符是双引号字符.这是您的第二个示例显示的内容:
Msgbox "This is ""myName""" 'This works fine
Run Code Online (Sandbox Code Playgroud)
其他语言通常使用反斜杠(\)作为转义字符.这可能会让事情变得更容易看到.假设VBScript使用反斜杠作为转义字符而不是双引号,您的代码将如下所示:
Msgbox "This is \"myName\"" ' doesn't work in VBScript; example only
Run Code Online (Sandbox Code Playgroud)
如果这种语法困扰你,你可以为双引号声明一个常量并每次使用它:
Const Quote = """"
' ... later in the code ...
Msgbox "This is " & Quote & "myName" & Quote
Run Code Online (Sandbox Code Playgroud)
每种语言都有自己的转义字符。不管是否偶然,在 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"
Run Code Online (Sandbox Code Playgroud)
但我个人更喜欢使用,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"
Run Code Online (Sandbox Code Playgroud)
您可以使用Replace(如果您方便的话)和其他特殊字符。
str = Replace(Replace("A|B|C!1|2|3", "!", vbNewLine), "|", vbTab)
WScript.Echo str
'A B C
'1 2 3
Run Code Online (Sandbox Code Playgroud)
VBScript 中的双引号括住一个字符串。如果在字符串中插入单个双引号,则会过早终止该字符串,并且其余部分会导致错误。因此,您必须转义字符串内的双引号,这可以通过将它们加倍来完成。这就是为什么你的第三个命令有效而第二个命令无效。