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或其他。
答案 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