2017-10-14 24 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的情況。這也是可疑的。 –