使用ExecuteGlobal导入.vbs函数库文件时,为什么VBScript会说“无效字符”?

时间:2012-12-21 19:56:37

标签: character-encoding vbscript import importerror invalid-characters

我在VBscript中遇到“无效字符”错误!特别是,在这段代码中:

'*******************************************************************
'Import Code
'by Cheyne Wallace
'November 2008

'When using only VBscript (not QTP), this code will import any function library passed into it.
'Copy this function into a file, then use it to bring in various other function libraries.
'Usage:
'   Import "Library.vbs"

Sub Import(strFile)
    Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
    Dim wss : Set wss = CreateObject("WScript.Shell")
    strFile = wss.ExpandEnvironmentStrings(strFile)
    strFile = objFSO.GetAbsolutePathName(strFile)
    Set objFile = objFSO.OpenTextFile(strFile, 1)
    ExecuteGlobal objFile.ReadAll
    objFile.Close : Set objFSO = nothing
    Set wss = Nothing
End Sub

错误在Char:2,206行显示“Microsoft VBScript compilation error. Invalid Character. Code: 800A0408”,这是ExecuteGlobal objFile.ReadAll上的第一个字母(字符1是标签)。

我输入并重新输入了该线以及周围的换行符。不过,它一直在说'无效的角色'。发生了什么事?

3 个答案:

答案 0 :(得分:5)

事实证明,问题不在于ExecuteGlobal,而在于我试图导入的.vbs文件。我导入的文件不是ANSI编码。如果VBScript对您要导入的文件有问题,它将在ExecuteGlobal开头的字符和行中报告错误(这无疑会引起混淆)。

打开您尝试导入的文件,将其转换为ANSI,一切都应该有效。

答案 1 :(得分:2)

对于那些在未来遇到同样问题的人来说,为了解决这个问题:

  1. 在记事本中打开.vbs
  2. 转到文件和"另存为"
  3. 在文件名框下方,您会看到一个用于编码的下拉菜单。选择ANSI。

答案 2 :(得分:0)

更改代码的来源:

Set objFile = objFSO.OpenTextFile(strFile, 1)
ExecuteGlobal objFile.ReadAll

Set objFile = objFSO.OpenTextFile(strFile, 1, False, -2)
ExecuteGlobal objFile.ReadAll

OpenTextFile函数中的最后一个参数是TristateUseDefault = -2(使用系统默认值打开文件。)