Windows通過端口號殺死相關進程


 

簡單的bat處理,把指定端口集合殺死相應的進程,就是殺死對應的pid

@echo off & setlocal EnableDelayedExpansion set obj[0]=6340
set obj[1]=6330
set obj[2]=1010
set obj[3]=6301
set obj[4]=6001

set port=0
set pid=0

for /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]=6340 set obj[1]=6330 set obj[2]=1010 set obj[3]=6301 set 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 EnableDelayedExpansion title 殺死端口 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
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM