1

こんにちは、ダウンロードしたパッケージとアップロードしたパッケージに関する情報をユーザーに表示するバッチファイルを作成したいと思います。この情報はコマンド「netstat-e」から取得でき、「netstat-e>log.txt」を使用してこの情報をログファイルに保存できます。しかし、この新しいバッチファイルを開くと、そのユーザーはダウンロードおよびアップロードされたパッケージに関する情報のみを表示でき、このコマンドからのすべての情報は表示されません。次のようになります。

ダウンロードしたパッケージ:-info from netstat -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は最初の結果(バイト)をスキップし、他の2つを別の変数に入れます

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 に答える