关于检测进程网络连接状态的批处理
我近来需要编写一个实用用bat。用来检测进程的网络状态,然后对其作出判断。例如,我需要对一个游戏进程监测。假设这个进程名为XXXX.exe。我已经编号了如果进程结束就关闭...
我近来需要编写一个实用用bat。用来检测进程的网络状态,然后对其作出判断。例如,我需要对一个游戏进程监测。假设这个进程名为XXXX.exe。我已经编号了如果进程结束就关闭计算机的代码,并且每隔5分钟监测一次,但我发现有时程序会发生断网,但进程是不会结束的。所以这就需要补充一个语句进去,监测程序的连接端口是否在线,或者检测进程的网络吞吐量,如果为3分钟内小于300KB,就关闭计算机。我虽然知道应该使用这2种方法的一种,但不知该怎么写。西希望高手帮我解决一下,不胜感激。也希望不太懂的人不要随便发言,给我直接截个什么过来。那样解决不了实际问题。我把代码中的一段发在地下,希望高手帮我完善那个if。
:start
@set A=xxx.exe
@set T=300
:loop
@echo %A%监测中...检测时间为%T%秒一次.
@set N=119
@for /f %%i in ('tasklist^| findstr /i "%A%"') do set N=%%i
@if /i "%N%"=="%A%" ping -n %T% 127.1>nul&goto loop
@goto shurt
:shurt
shutdown -s -t 120 展开
:start
@set A=xxx.exe
@set T=300
:loop
@echo %A%监测中...检测时间为%T%秒一次.
@set N=119
@for /f %%i in ('tasklist^| findstr /i "%A%"') do set N=%%i
@if /i "%N%"=="%A%" ping -n %T% 127.1>nul&goto loop
@goto shurt
:shurt
shutdown -s -t 120 展开
展开全部
@echo off
set A=xxx.exe
set T=300
echo %A%监测中...检测时间为%T%秒一次.
for /f "delims=" %%i in ('tasklist /fo csv^|findstr /i "%A%"') do (
for /f "tokens=2 delims=," %%j in ("%%i") do set Pid=%%~j&goto loop)
::查找xxx.exe,找到就把它的PID值赋给变量Pid,没有找到关机
goto shut
:loop
::进入查找循环
tasklist|findstr /i "%A%">nul&&goto findnet||goto shut
::查找xxx.exe,找到继续检查它的网络连接,没有则关机
:findnet
for /f "skip=4 tokens=4,5 delims= " %%i in ('netstat -ano^|find "%Pid%"') do (
echo %%i%%j|find "%Pid%">nul&&goto delay
)
::根据Pid值,查找它的网络连接情况,有就延时,没有则关机
goto shut
:delay
ping -n %T% 127.1>nul&goto loop
:shut
shutdown -s -t 120
set A=xxx.exe
set T=300
echo %A%监测中...检测时间为%T%秒一次.
for /f "delims=" %%i in ('tasklist /fo csv^|findstr /i "%A%"') do (
for /f "tokens=2 delims=," %%j in ("%%i") do set Pid=%%~j&goto loop)
::查找xxx.exe,找到就把它的PID值赋给变量Pid,没有找到关机
goto shut
:loop
::进入查找循环
tasklist|findstr /i "%A%">nul&&goto findnet||goto shut
::查找xxx.exe,找到继续检查它的网络连接,没有则关机
:findnet
for /f "skip=4 tokens=4,5 delims= " %%i in ('netstat -ano^|find "%Pid%"') do (
echo %%i%%j|find "%Pid%">nul&&goto delay
)
::根据Pid值,查找它的网络连接情况,有就延时,没有则关机
goto shut
:delay
ping -n %T% 127.1>nul&goto loop
:shut
shutdown -s -t 120
展开全部
方法1:假设你的程序端口号是119
@echo off
:s
netstat -ano|find ":119 "&&(set Port=Yes)||(set Port=No)
if "%Port%"=="No" echo 端口不在线
if "%Port%"=="Yes" echo 端口在线
ping -n 5 127.0.1>nul 2>nul
goto:s
方法2:假设你的程序XXX.exe
@echo off
:s
for /f "tokens=2 delims= " %%i in ('tasklist^|findstr /i "XXX.exe"') do (
for /f "tokens=2 delims= " %%j in ('netstat -ano|find "%%i"') do set N=%%j
)
if not defined N echo 进程在线,但端口不在线
ping -n 5 127.0.1>nul 2>nul
goto:s
方法3记流量很麻烦的,我怕麻烦自己参考我之前的回答
http://zhidao.baidu.com/question/147727875.html
间隔时间,3分钟的话也就是180秒
@echo off
:s
netstat -ano|find ":119 "&&(set Port=Yes)||(set Port=No)
if "%Port%"=="No" echo 端口不在线
if "%Port%"=="Yes" echo 端口在线
ping -n 5 127.0.1>nul 2>nul
goto:s
方法2:假设你的程序XXX.exe
@echo off
:s
for /f "tokens=2 delims= " %%i in ('tasklist^|findstr /i "XXX.exe"') do (
for /f "tokens=2 delims= " %%j in ('netstat -ano|find "%%i"') do set N=%%j
)
if not defined N echo 进程在线,但端口不在线
ping -n 5 127.0.1>nul 2>nul
goto:s
方法3记流量很麻烦的,我怕麻烦自己参考我之前的回答
http://zhidao.baidu.com/question/147727875.html
间隔时间,3分钟的话也就是180秒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询