首页 > 学院 > 操作系统 > 正文

windows 通过端口杀死进程过程解析(bat)

2020-02-03 22:08:41
字体:
来源:转载
供稿:网友

简单的bat处理,把指定端口集合杀死相应的进程,就是杀死对应的pid

@echo off & setlocal EnableDelayedExpansionset obj[0]=6340set obj[1]=6330set obj[2]=1010set obj[3]=6301set obj[4]=6001set port=0set pid=0for /f "usebackq delims== tokens=1-2" %%a in (`set obj`) do (  set port=%%b  for /f "tokens=5" %%m in ('netstat -aon ^| findstr ":%%b"') do (    set pid=%%m  )  if "!pid!"=="0" (    echo 端口号【!port!】没有占用  ) else (    echo 端口号【!port!】相关进程以杀死    taskkill /f /pid !pid!  )  set pid=0)pause

运行结果

1、一个端口都没有被占用情况

2、有一个6001端口被占用情况

讲解

bat是没有数组的,

set obj[0]=6340set obj[1]=6330set obj[2]=1010set obj[3]=6301set obj[4]=6001

可以看做事5个变量

第一个for循环【for /f "usebackq delims== tokens=1-2" %%a in (`set obj`) do (】就是从环境中拿去变量obj开头的,有多少个就遍历多少遍,再通过=切割【delims==就是用=切割】

tokens=1-2就是拿去第一二列,%%a就是循环的变量开始【可以不是a,也可以是i】,那么%%a就是例如obj[0],%%b就是例如6001

第二个for循环【for /f "tokens=5" %%m in ('netstat -aon ^| findstr ":%%b"') do (】就是从netstat -aon ^| findstr ":6001“【^是取消转义字符|,等同于命令行netstat -aon | findstr ":6001“】这个查所有端口占用情况中发现:6001这多行数据,这行数据第5列【"tokens=5"】就是pid

杀死pid【taskkill /f /pid !pid!】

修改版【上面那个会杀死外地占用端口调用本地端口的进程,这个是只杀死本地占用的端口】

@echo off & setlocal EnableDelayedExpansiontitle 杀死端口for %%a in (6340,6330,1010,6301,6001) do (  set pid=0  for /f "tokens=2,5" %%b in ('netstat -ano ^| findstr ":%%a"') do (    set temp=%%b    for /f "usebackq delims=: tokens=1,2" %%i in (`set temp`) do (      if %%j==%%a (        taskkill /f /pid %%c        set pid=%%c        echo 端口号【%%a】相关进程以杀死      ) else (        echo 不是本机占用端口【%%a】      )    )  )  if !pid!==0 (    echo 端口号【%%a】没有占用  ))echo 操作完成pause

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表