Windows通過埠號殺死相關程序
阿新 • • 發佈:2020-08-24
簡單的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