2017-10-14 4 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 파일을 많이 작성하는 경우 디렉토리 뚜껑이 있습니다.

그리고 Loop

+0

후 그는 각각의 반복과 같은 파일을 덮어 쓰는 것에 StdOut 스트림 이동 objFile.Close의 경과 동안 폐쇄에서 파일을 방지하기 위해, 나는 어떻게 든 하나의'netstat' 실행이 발생한다고 의심 4GB 이상의 출력. FAT32를 처음 사용하는 경우에만 4GB 제한이 적용됩니다. 어느 것도 의심 스럽다. –