本帖最后由 小胖狐狸 于 2011-12-9 10:38 编辑
前几天单位的网络出现故障,我试图写个批处理时刻运行,检测网络状况
两个问题:
1、实际应用发现长时间执行该批处理,会自动终止,请教为什么,如何解决?
2、这个批处理本来在for语句中,我是调用两个函数do1和do2,后来发现语句类似,就设法将两个函数合并了,但是实际应用中发现合并前,该批处理执行时占用内存为1M多,合并后占用2M多,请问如何让批处理尽量少的占用内存?——现在是代码看似简洁了,占内存反而多了
补充:刚刚才发现,这个批处理在执行的时候,居然每秒钟占用内存量都会增加50K左右,发帖到现在已经9M多了……现在我猜到为什么会自动终止了
工作原理简单说明:
默认ping www.baidu.com的联通状况,如果连接状态发生变化,则写入日志文件,并检测另外两个连接状态
文中涉及的IP_url.txt内容如下,文中涉及的log日志文件供写入- 检查以下特定网络地址的连通性
- 局域网网关:192.168.1.1
- 百度IP:61.135.169.125
- 百度URL:www.baidu.com
复制代码
- 备注:退格符此处无法显示 set 退格=
- @echo off&setlocal enabledelayedexpansion
- color 0A
- cls
- mode con: cols=50 lines=4
- :: 通讯正常时 status=1,异常时 status=0;
- set status1=1
- set status2=1
- set status3=1
- set skipnum=3
- set connect1=通讯正常
- set connect0=通讯异常
- set connectS1=恢复连接
- set connectS0=无法连接
- set 退格=
-
- echo.>>ConnectError.Log
- echo.>>ConnectError.Log
- echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓>>ConnectError.Log
- echo ┃%date% %time:~,-3% 开始监控指定IP地址的连通状况 ┃>>ConnectError.Log
- echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛>>ConnectError.Log
- echo.>>ConnectError.Log
-
- :detect
- ::判断配置文件IP_url.txt中指定IP地址是否能ping通
- for /f "delims=: tokens=1,2 skip=%skipnum%" %%i in (IP_url.txt) do (
- set var_ip=%%j
- set var_n=%%i
- ping -n 1 -l 1 -w 1 !var_ip!|find /i "TTL=">nul &&call :do 1 0 3||call :do 0 1 1
- )
-
- :do
- ::根据不同状况改变颜色
- if %1 equ 1 (color 0A) else (color EC)
- ::设置屏显及闪动●
- set var1=%1
- set /p a=%退格%<nul
- set /p a= <nul
- ping -n 1 127.1>nul
- set /p a=%退格%<nul
- set /p a= ● !var_n! !var_ip! !connect%var1%! <nul
- ::如果连通状态有变化,则写入日志
- if !status%skipnum%! equ %2 (
- set status%skipnum%=%1
- echo %date% %time:~,-3% !var_n! !var_ip! !connectS%var1%!>>ConnectError.Log
- )
- if %1 equ 1 (if %skipnum% lss 3 (set /a skipnum=%random%%%3+1)) else (if %skipnum% gtr 1 (set /a skipnum=%random%%%3+1))
- call :delay2&&goto :detect
-
- :delay2
- ping -n 3 127.1>nul
复制代码
|