windows 根据端口号关闭进程脚本
windows 根据端口号关闭进程脚本
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
title 端口进程管理工具:main
cls
echo 端口进程管理工具
echo ========================
echo 1. 批量关闭端口进程
echo 2. 列出所有占用端口的进程
echo 3. 退出
echo.
set /p choice=请选择操作(1-3):if "%choice%"=="1" goto batch_close
if "%choice%"=="2" goto list_ports
if "%choice%"=="3" exit /b
echo 无效选择,请重新输入
timeout /t 2 >nul
goto main:batch_close
echo.
:retry_ports
set ports=
set /p "ports=请输入端口号(多个端口用空格/逗号分隔,输入q返回主菜单):"
if /i "%ports%"=="q" goto mainREM 替换分隔符为统一空格格式
set "ports=%ports:,= %"
set "ports=%ports%;= %"
set "ports=%ports% "REM 初始化结果变量
set processed=0
set closed=0REM 循环处理每个端口
for %%p in (%ports%) do (set port=%%pREM 去除端口号两端的空格set "port=!port: =!"if not "!port!"=="" (set /a processed+=1REM 初始化该端口下的PID集合set pid_list=REM 查找占用该端口的所有PID(去重)for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":!port! "') do (set pid=%%aREM 检查PID是否已记录(避免重复)if "!pid_list!"=="" (set pid_list=!pid!) else (echo !pid_list! | findstr /C:"!pid!" >nul || set pid_list=!pid_list! !pid!))REM 处理去重后的PID集合if "!pid_list!"=="" (echo [端口 !port!] 无占用进程) else (for %%i in (!pid_list!) do (echo [端口 !port!] 发现进程 PID: %%itaskkill /PID %%i /F >nul 2>&1if !errorlevel! equ 0 (echo [成功] 进程 %%i 已终止set /a closed+=1) else (echo [失败] 无法终止进程 %%i(可能权限不足)))))
)echo.
if !processed! gtr 0 (echo 批量操作完成:共处理 !processed! 个端口,终止 !closed! 个进程
) else (echo 未输入有效端口号
)timeout /t 3 >nul
goto retry_ports:list_ports
echo.
echo 正在扫描活动端口...
netstat -ano | findstr /R ":[0-9]* " | findstr /V "\[::\]"
echo.
echo 提示:冒号后数字即为端口号(例如 :8080)
pause >nul
goto main