18

vb スクリプトについて、非常に基本的な疑問があります。

Msgbox "This is myName" ' This works fine

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

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

私の質問は、単語またはフレーズに二重引用符を2回使用する必要がある理由を、二重引用符で文字列を(変数に)保存または表示する必要があるかどうかです。一般的な二重引用符を使用しても、全体を表示したり、変数に文字列として保存したりする必要はありませんか?

4

4 に答える 4

7

各言語には独自のエスケープ文字があります。偶然か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"

Replace(都合がよければ) と残りの特殊文字を使用できます。

str = Replace(Replace("A|B|C!1|2|3", "!", vbNewLine), "|", vbTab)
WScript.Echo str
'A  B   C
'1  2   3
于 2013-04-03T10:23:55.353 に答える
4

文字列リテラルは、文字列の内容を外部から分離するために区切る必要があります。VBScript の文字列区切り文字は " (二重引用符) です。他の言語も " を使用します。代替言語として ' (一重引用符) を使用するか、意味がわずかに異なる区切り文字を使用する言語もあります。

文字列リテラルに区切り文字を含めるには、エスケープする必要があります (文字列の「終了」または「開始」を意味しないものとしてマークされます。文字列リテラルの " のエスケープ マーカーは " です。VBscript では "" を指定します。他の言語では使用されます。\"二重引用符をエスケープします。

そう

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

何を表示 (または保存) する場合は、正しい VBScript ですThis is "myName"

于 2013-04-02T17:52:00.193 に答える
1

VBScript の二重引用符は文字列を囲みます。文字列内に単一の二重引用符を挿入すると、文字列が途中で終了し、残りがエラーの原因になります。そのため、文字列内の二重引用符をエスケープする必要があります。これは二重引用符を二重にすることで実行できます。そのため、3番目のコマンドは機能しますが、2番目のコマンドは機能しません。

于 2013-04-02T17:51:51.350 に答える