我已多次搜索此错误代码并已访问多个站点以阅读响应.长话短说,还没有找到解决方案.
引用的一个页面:发送时出错(在vbscript中使用sendkeys的字符
这是我的代码:
set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("C:\Downloads\software\putty.exe -load navstat")
DIM date
date = 301113
DIM tran1
tran1 = TAFFY
set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile("C:\Users\Adrian\Desktop\Entries1.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If InStr(strLine, "JFK.GREKI3.MARTN..TOPPS") Then
set indi = 2
set tran1 = TOPPS
End If
Loop
Run Code Online (Sandbox Code Playgroud)
发生了什么:我正在扫描文本字符串的.txt文件(Entries1.txt).如果它们出现,我需要设置相应的indi值(所以当indi稍后用作变量时它将使用正确的#)并更改tran1变量.
出于某种原因,我收到错误:
set objFile = objFSO.OpenTextFile
Run Code Online (Sandbox Code Playgroud)
错误是
无效的过程调用或参数代码:800A0005
非常感谢帮助.
Ans*_*ers 10
虽然肯的解决方案是正确的,但它没有正确解释你得到的错误的原因,所以我添加了一个补充答案.
该错误是由该标识符所引起ForReading的线
set objFile = objFSO.OpenTextFile("C:\Users\Adrian\Desktop\Entries1.txt", ForReading)Run Code Online (Sandbox Code Playgroud)
该OpenTextFile方法接受可选的第二个参数iomode,该参数的值可以是1,2或8.但是,与文档建议的相反,这些数值没有预定义的常量.除非你自己定义它们(你没有定义它们),例如:
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Run Code Online (Sandbox Code Playgroud)
您必须使用数值或完全省略参数(在这种情况下,它默认为1).
如果使用未定义的标识符,ForReading则解释器将使用值自动初始化它Empty,这可能会产生意外行为,就像在您的情况下一样.
示范:
>>> WScript.Echo TypeName(ForReading)
Empty
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", ForReading)
Invalid procedure call or argument (0x5)
>>> WScript.Echo TypeName(f)
Empty
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", Empty)
Invalid procedure call or argument (0x5)
>>> WScript.Echo TypeName(f)
Empty
>>> 'parameter omitted
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt")
>>> WScript.Echo TypeName(f)
TextStream
>>> Set f = Nothing
>>> 'numeric parameter
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", 1)
>>> WScript.Echo TypeName(f)
TextStream
>>> Set f = Nothing
>>> 'define identifier before using it as parameter
>>> ForReading = 1
>>> WScript.Echo TypeName(ForReading)
Integer
>>> Set f = fso.OpenTextFile("C:\Temp\some.txt", ForReading)
>>> WScript.Echo TypeName(f)
TextStreamRun Code Online (Sandbox Code Playgroud)
您可以使用Option Explicit(强烈建议用于生产代码)来避免此类问题.当代码中存在未定义的变量时,它会引发运行时错误,从而可以在早期检测到类似的问题.
删除ForReading该行的部分允许它使用以下代码在我的系统上执行:
'Saved in D:\TempFiles\TypeFile.vbs
set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile("C:\Users\Ken\Desktop\Test.txt")
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
wscript.echo strLine
Loop
Run Code Online (Sandbox Code Playgroud)
Test.txt我使用包含以下内容的简单测试:
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Run Code Online (Sandbox Code Playgroud)
我在命令提示符下使用以下命令对其进行了测试:
D:\TempFiles>cscript TypeFile.vbs
Run Code Online (Sandbox Code Playgroud)
我收到了这个输出:

注意:您将遇到的另一个问题是set在这一行(也许是其后的那一行)上使用:
set indi = 2
Run Code Online (Sandbox Code Playgroud)
indi是一个简单变量,而不是对象,因此不需要set. 直接赋值即可:
indi = 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12427 次 |
| 最近记录: |