2017-10-14 22 views
1
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文件的先前内容。VBScript引发“对象变量未设置”错误

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

回答

1

您得到的错误可能是因为您在第一次迭代后关闭文件句柄。在循环之后修复这个移动行objFile.Close

这样说,我不会推荐在这里使用Exec方法。在你的情况下,它更容易掏出来CMD并使用输出重定向:

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

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

,并防止在StdOut流动objFile.Close时隔期间封闭的Loop

+0

后,他改写了与每个迭代相同的文件的文件,我莫名其妙地怀疑,一个'netstat'运行将产生4+ GB输出。更不用说,4 GB的限制只适用于他首先使用FAT32的情况。这也是可疑的。 –