Board logo

标题: [问题求助] VBS如何把这个结果写入文本文档,谢谢 [打印本页]

作者: czar8    时间: 2012-3-28 11:45     标题: VBS如何把这个结果写入文本文档,谢谢

本帖最后由 czar8 于 2012-3-28 17:31 编辑

本人想在cmd中获取网络流量,再执行相应的操作,批处理后台反复执行。
找了半天只找到了下面这个VBS脚本,执行结果看上去不错,但本人对VBS纯属文盲。想把它的结果写到c:\rece.txt中,9秒刷新写入一次。希望大伙给予帮助,谢谢。
  1. ' *==============================================================================*
  2. ' * 网络流量统计.vbs         By: FastSLZ 2009-1-28    首次发布与 bbs.bathome.cn  *
  3. ' *==============================================================================*
  4. '特别提醒:本脚本必须在Administrator账户,且必须通过杀毒软件授权下才能正常运行!
  5. Dim WH
  6. Set WH = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
  7. For Each aWH in WH
  8.      TW = Int(aWH.ScreenWidth/8)
  9. Nexta
  10. Set WH = Nothing
  11. If TW <= 0 Then :TW =128 :End If
  12. If (Lcase(Right(Wscript.FullName,11)) = "wscript.exe") Then
  13.    CreateObject("WScript.Shell").Run("%Comspec% /C " &Chr(34)&"mode con cols="& TW &"&Title 网络流量统计&&Cscript.exe //NoLogo  "&Chr(34)& Wscript.ScriptFullName &Chr(34)&Chr(34)),3:Wscript.Quit
  14. End If
  15. Showy=vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
  16. Input=InputBox(Showy &"请输入刷新间隔时间(单位秒)"& vbCrLf &"间隔时间越长统计数据越精确", "BY: fastslz","2")
  17. Input=Int(Input)
  18. If Len(Input) = 0 Then:Input = 1:End If
  19. If Len(Input) >= 2 Then:WScript.Quit:End If
  20. InputS = Input*1000
  21. Dim WMI,Name
  22. Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  23. Set colItems = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled='TRUE'")
  24. For Each objItem In colItems
  25.     Name =  Replace(objItem.Description,"/","_")
  26. Next
  27. Set colItems = Nothing
  28. WScript.Echo "活动连接:"&Name
  29. If (IsArray(Name)) = TRUE Then:MsgBox vbTab& "貌似无任何网络" :WScript.Quit:End If
  30. Call Network(Name)
  31. Function Network(Names)
  32. Do
  33. Dim A
  34. Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& Name &"'")
  35. For Each B In A
  36.     R1 = B.BytesReceivedPersec
  37.     S1 = B.BytesSentPersec
  38.     T1 = B.BytesTotalPersec
  39.     If T0 ="" Then :T0 = B.BytesTotalPersec :End If
  40. Next
  41. Set A = Nothing
  42. WScript.Sleep(InputS)
  43. Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& Name &"'")
  44. For Each B In A
  45.     R2 = B.BytesReceivedPersec
  46.     S2 = B.BytesSentPersec
  47.     T2 = B.BytesTotalPersec
  48. Next
  49. Set A = Nothing
  50. WScript.Echo "下载:" & CheckSize((R2-R1)/Input) &"/s" _
  51.       &vbTab&"上传:" & CheckSize((S2-S1)/Input) &"/s" _
  52.       &vbTab&"平均:" & CheckSize((T2-T1)/Input) &"/s" _
  53.       &vbTab&"小计:" & CheckSize(T1-T0) _
  54.       &vbTab&"累计:" & CheckSize(T1)
  55. Loop
  56. End Function
  57. Function CheckSize(SZ)
  58. On Error Resume Next
  59. If SZ => 1073741824 Then
  60.    SZ = FormatNumber(SZ/1073741824) & " GB"
  61.    ElseIf SZ => 1048576 Then
  62.    SZ = FormatNumber(SZ/1048576) & " MB"
  63.    ElseIf SZ => 1024 Then
  64.    SZ = FormatNumber(SZ/1024) & " KB"
  65. Else
  66.    SZ = SZ & " 字节"
  67. End If
  68. CheckSize=Right("      " & SZ,10)
  69. End Function
复制代码

作者: czar8    时间: 2012-3-28 11:54

vbs必须隐藏运行
最好是用批处理调用一次就获取一次流量即可
万分感谢
作者: find    时间: 2012-3-28 13:14

9秒刷新写入一次,是不是每次写入都覆盖以前的内容?
作者: czar8    时间: 2012-3-28 17:42

回复 3# find


    不要覆盖,我的详细目的是用一个驻留后台的批处理统计10秒内总下载流量,如果分别超过自定范围(如3M),则执行注销命令。同时10写入一次流量到文本
作者: find    时间: 2012-3-28 22:30

test.bat
  1. cscript //nologo C:\test.vbs >>C:\rece.txt
复制代码

作者: czar8    时间: 2012-3-28 22:50

回复 5# find


    不懂啊,能不能帮我全部改一下,实现我上面的功能呀




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2