VBScript抛出"对象变量未设置"错误

时间:2017-10-14 01:21:48

标签: vbscript

Set sh = CreateObject("Wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim counter, myNum, fileLine
myNum = 0
counter = 9000000
Do While myNum < counter
    myNum = myNum + 1
    Call GetConnections()
Loop

Function GetConnections()
    i = 0
    outFile = "netband_logger_vbs.tmp"
    Set objFile = objFSO.CreateTextFile(outFile, True)
    Set shExec = sh.Exec("netstat -e")
    Do While Not shExec.StdOut.AtEndOfStream
        fileLine = shExec.StdOut.ReadLine()
        objFile.Write fileLine & vbCrLf
        objFile.Close
    Loop
End Function

我上面有VBScript。我想要做的是运行netstat -e命令9000000次并逐行将每行输出写入文本文件。每次第一轮执行结束后,脚本都应该使用新一轮执行中的值覆盖netband_logger_vbs.tmp文件的先前内容。

目前我有两个问题:我似乎无法将整个输出写入我的.tmp文件,而且我还面临一个未设置的&#34;对象变量&#34;错误。

2 个答案:

答案 0 :(得分:1)

您获得的错误可能是因为您在第一次迭代后关闭了文件句柄。要解决此问题,请在循环后移动行objFile.Close

话虽如此,我建议不要在这里使用Exec方法。在您的场景中,外壳到CMD并使用输出重定向要容易得多:

sh.Run "%COMSPEC% /c netstat -e >""" & outFile & """", 0, True

答案 1 :(得分:0)

至于为什么你不能将所有输出都放到一个文件中; FAT32文件系统有4GB的上限,如果你正在编写很多小的.tmp文件,那就有一个目录上限。

并防止文件在StdOut流移动objFile.CloseLoop

之后失效