1

Hy,我想创建批处理文件以向用户显示有关已下载包和已上传包的信息。我可以从命令“netstat -e”获取此信息,并且可以使用“netstat -e >log.txt”将此信息保存在日志文件中。但我希望,在打开这个新的批处理文件时,该用户只能看到有关已下载和已上传包的信息,而不是来自此命令的所有信息,如下所示:

下载的包:来自netstat的-info -e-

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

当用户打开此批处理时,是否可以从日志文件中剪切此信息并将其放入批处理文件中?打开批处理文件后,整个过程如下所示:-使用“netstat -e >log.txt”保存日志文件,-获取所需信息,-将此信息放入批处理文件,-现在用户看到此信息.

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

4

2 回答 2

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
于 2013-03-13T11:35:50.740 回答
0

只需像这样通过 find 命令传递 netstat 的结果

netstat -e | find "Bytes"

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

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

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

无需单独的程序。您可以将带有注释的 2 个值通过管道传输到这样的测试或批处理文件。For /F 与 '' 之间的括号中的文本执行命令并让 For 解析结果。Tokens=2,3 跳过第一个结果(字节)并将另外两个放在单独的变量中

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

设置然后

..
received=75230393
sent=8966725
..

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

for /F "tokens=2,3" %a in ('netstat -e ^| find "Bytes"') do mybatch %a %b
于 2013-03-13T11:00:41.570 回答