Board logo

标题: [网络连接] 流量监控的批处理怎么修改? [打印本页]

作者: easynet    时间: 2014-8-19 15:39     标题: 流量监控的批处理怎么修改?

我在网上找到一段关于流量监控的批处理,可是运行后计数全为0,不知这个批处理哪有问题,请帮忙看看。我的系统是WIN8.1。
  1. @echo off & setlocal ENABLEDELAYEDEXPANSION
  2. MODE con: COLS=22 LINES=10
  3. for /f "tokens=2,3" %%i in ('netstat -e ^|findstr "Bytes"') do (
  4.     set oldrec=%%i
  5.     set oldsent=%%j
  6. )
  7. :loop
  8. echo WScript.Sleep 1000 > %temp%\tmp$.vbs
  9. cscript //nologo %temp%\tmp$.vbs
  10. for /f "tokens=2,3" %%i in ('netstat -e ^|findstr "Bytes"') do (
  11.     set newrec=%%i
  12.     set newsent=%%j
  13. )
  14. set /a rec=(%newrec%-%oldrec%)*8/1024
  15. set /a sent=(%newsent%-%oldsent%)*8/1024
  16. cls
  17. echo 下载流量:%rec% kbits
  18. echo.
  19. echo 上传流量:%sent% kbits
  20. set /a oldrec=newrec
  21. set /a oldsent=newsent
  22. goto :loop
复制代码

作者: DAIC    时间: 2014-8-19 15:51

打开命令行窗口,执行:
netstat -e

把结果发出来看看
作者: CrLf    时间: 2014-8-19 15:55

目测楼主系统下输出的 Bytes 是中文 字节
作者: easynet    时间: 2014-8-19 15:59

回复 2# DAIC
作者: CrLf    时间: 2014-8-19 16:05

回复 4# easynet


就知道是这样...把两处
  1. findstr "Bytes"
复制代码
  1. findstr "Bytes 字节"
复制代码

作者: easynet    时间: 2014-8-19 16:15

回复 5# CrLf


    不管用
作者: CrLf    时间: 2014-8-19 16:27

回复 6# easynet


    那就试试
  1. findstr /rc:"Bytes" /c:"字节"
复制代码

作者: Linuxer    时间: 2014-8-19 16:29

回复 5# CrLf

是不是不用加Bytes?
  1. findstr "字节"
复制代码
我这加Bytes执行没有结果。
  1. C:\Windows\system32>netstat -e | findstr "Bytes 字节"
  2. C:\Windows\system32>
  3. C:\Windows\system32>
  4. C:\Windows\system32>netstat -e | findstr "字节"
  5. 字节                    4209033302        91175807
  6. C:\Windows\system32>
复制代码

作者: CrLf    时间: 2014-8-19 16:30

回复 8# Linuxer


    findstr 处理中文经常要用 /r 开关,算是个缺陷吧
作者: Linuxer    时间: 2014-8-19 16:34

回复 9# CrLf


    加r,是模糊匹配,不加r是精确匹配,是不是这样理解?
作者: Linuxer    时间: 2014-8-19 16:38

回复 6# easynet


    就用
  1. findstr "字节"
复制代码
查询好了,简单一点。
作者: CrLf    时间: 2014-8-19 17:00

回复 10# Linuxer


    见 findstr /?,其实 findstr 默认就是正则匹配,我也不知道为什么中文字符还要加 /r (印象中有人说有时候可以用 /l) 才能正确匹配到
作者: easynet    时间: 2014-8-21 22:04

回复 11# Linuxer


    能显示了,谢谢啊。但是为什么显示的流量与实际用的流量不相符?
作者: easynet    时间: 2014-8-21 22:07

回复 3# CrLf


     改成“findstr "字节"”后就能显示了,谢谢啊。但是为什么显示的流量与实际用的流量不相符?
作者: Linuxer    时间: 2014-8-21 22:13

回复 14# easynet
  1. set newrec=%%i/1024
  2. set newsent=%%j/1024
复制代码
这样试试。
作者: easynet    时间: 2014-8-21 22:48

回复 15# Linuxer


    不行,成负数了。
作者: apang    时间: 2014-8-21 22:59

回复 8# Linuxer


C:\Windows\System32>set /a 4209033302
无效数字。数字精确度限为 32 位。
作者: Linuxer    时间: 2014-8-22 10:20

回复 16# easynet


    嗯,是不对的,昨天理解错了。
我也没搞明白为什么不一致。查资料也没查出有用的信息。
作者: apang    时间: 2014-8-22 13:22

  1. @echo off
  2. MODE con: COLS=22 LINES=10
  3. for /f "tokens=2,3" %%i in ('netstat -e ^|findstr /i "Bytes 字节"') do (
  4.     set rec=%%i
  5.     set sent=%%j
  6. )
  7. :loop
  8. echo WScript.Sleep 1000 > "%temp%\tmp$.vbs"
  9. cscript //nologo "%temp%\tmp$.vbs"
  10. cls
  11. (for /f "tokens=2,3" %%i in ('netstat -e ^|findstr /i "Bytes 字节"') do (
  12.     echo res=FormatNumber((%%i-%rec%^)*8/1024, 2, true^)
  13.     echo sent=FormatNumber((%%j-%sent%^)*8/1024, 2, true^)
  14.     echo WScript.Echo "下载流量:" ^& res ^& " kbits"
  15.     echo WScript.Echo ""
  16.     echo WScript.Echo "上传流量:" ^& sent ^& " kbits"
  17.     set rec=%%i
  18.     set sent=%%j
  19. )) > "%temp%\tmp$.vbs"
  20. cscript //nologo "%temp%\tmp$.vbs"
  21. goto :loop
复制代码

作者: hnldwhm52    时间: 2014-9-11 23:37

xuexixiexie!!
作者: hnldwhm52    时间: 2014-9-11 23:49

xuexixiexie!!




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