从新批处理文件中的netstat -e获取一些信息

时间:2013-03-13 10:30:07

标签: networking vbscript batch-file

Hy,我想创建批处理文件以向用户显示有关Downloaded packages和Uploaded packages的信息。我可以从命令'netstat -e'获取此信息,我可以使用'netstat -e> log.txt'将此信息保存在日志文件中。 但我想,在打开这个新的批处理文件时,该用户只能看到有关Downloaded和Uploaded软件包的信息,而不是这个命令的所有信息,如下所示:

下载的包: -info from netstat -e -

上传的包: -info from netstat -e -

当用户打开此批次时,是否可以从日志文件中删除此信息并将其放入批处理文件中?打开批处理文件后的整个过程看起来像这样: 使用'netstat -e> log.txt'保存日志文件, - 获取所需信息, - 在批处理文件中输出此信息, - 现在用户看到这个信息。

执行此操作的方法可以是任何操作,例如使用cmd和VBS或其他。

2 个答案:

答案 0 :(得分:1)

如果您需要以更复杂的方式处理和/或显示来自netstat(或其他控制台工具)的信息,VBScript版本可以更好地扩展:

  ' To simplify the regexp, I have stolen peter's idea of using find; %comspec% needed for |
  Dim sCmd : sCmd = "%comspec% /c netstat -e | find ""packet"""
  ' Shortened .Exec call; works for simple cases
  Dim sAll : sAll = CreateObject("WScript.Shell").Exec(sCmd).Stdout.ReadAll()
  WScript.Echo sAll

  Dim reCut : Set reCut = New RegExp
  reCut.Global  = True
  ' Just get all (4) numbers (non-empty sequences of digits)
  reCut.Pattern = "\d+"
  Dim oMTS : Set oMTS = reCut.Execute(sAll)

  ' Use .NET formatting for nice output
  Dim oSB : Set oSB = CreateObject("System.Text.StringBuilder")
  oSB.AppendFormat_4 _
       "Info from 'netstat -e:{0}{1,21}: {2,12:D}{0}{3,21}: {4,12:D}" _
     , Array( _
           vbCrLf _
         , "Packages received", CLng(oMTS(0).Value) + CLng(oMTS(2).Value) _
         , "Packages sent"    , CLng(oMTS(1).Value) + CLng(oMTS(3).Value) _
       )
  WScript.Echo oSB.ToString()

输出:

Unicast packets              488836          264811
Non-unicast packets             650             652

Info from 'netstat -e:
    Packages received:       489486
        Packages sent:       265463

答案 1 :(得分:0)

通过find命令管道netstat的结果,如下所示

netstat -e | find "Bytes"

你仍然可以重定向到像这样的文本文件

netstat -e | find "Bytes" > text.txt

编辑:根据您的评论,这里有更多可能性

无需单独的程序。 您可以通过注释将2个值传递给像这样的测试或批处理文件。 对于/ F,文本在parantheses之间''执行命令并让let解析结果。令牌= 2,3跳过第一个结果(字节)并将另外两个放在单独的var

for /F "tokens=2,3" %a in ('netstat -e ^| find "Bytes"') do echo received:%a sent:%b>log.txt

这在log.txt

中给出
received:74546759 sent:8593498

或者您可以将值设置为环境变量并在批处理中使用它

for /F "tokens=2,3" %a in ('netstat -e ^| find "Bytes"') do set received=%a&set sent=%b

set给出

..
received=75230393
sent=8966725
..

或者您可以将值作为参数发送到像这样的批处理

for /F "tokens=2,3" %a in ('netstat -e ^| find "Bytes"') do mybatch %a %b