batch file杀死某个进程

我正在使用以下脚本来终止处于CLOSE_WAIT状态的进程,该进程监听某个特定的IP和特定的端口。

FOR /F "tokens=5 delims= " %%I IN ( 'netstat -ano ^| find "127.0.0.1:5900" ^| find "CLOSE_WAIT"' ) DO ( taskkill /PID %%I ) 

该脚本是它的工作,但我正在寻找一个小的修改。

我希望只有超过10个连接进入CLOSE_WAIT状态才会终止进程。 如果我们说在CLOSE_WAIT中只有3个连接,那么这个过程不应该被终止。

这是我的尝试。

我从这个post使用了一些技巧: https : //stackoverflow.com/questions/2913231/how-do-i-increment-a-dos-variable-in-a-for-f-loop

 echo off set /ac=1 setlocal ENABLEDELAYEDEXPANSION FOR /F "tokens=5 delims= " %%I IN ( 'netstat -ano ^| find "127.0.0.1:5900" ^| find "CLOSE_WAIT"' ) DO ( set /ac=c+1 set /a last=%%I ) if %c% geq 10 ( taskkill /PID !last! ) endlocal 

基本上,在这个循环中,我只是增加一个variables。 最后,如果数量大于10,我就杀​​了这个任务。

限制:这只会计算netstat返回的行数,并finds并使用最后一个为taskkill 计数PID 。 它假定所有的行都来自同一个PID,但是在某些情况下这只是真的(比如你的情况,你在哪里search地址和端口 )。