前言
在日常开发中,我们经常遇到这样的场景:
❗ “端口 3000 已被占用,请关闭后再试…”
于是你打开命令行,输入:
netstat -ano | findstr :3000
taskkill /PID 12345 /F
—— 但经常忘记命令,或者 PID 输错、权限不够、杀错进程,甚至还要去查语法。
更糟的是,当在调试多个项目、频繁启停服务时,手动查杀端口成了重复、低效、易错的体力活。
于是,我下决定:
“与其每次都查命令,不如写个工具,一键解决!”
准备工作
确认路径:建议统一放在一个目录,比如:
C:\Tools\PortKiller\
创建文件夹:
mkdir C:\Tools\PortKiller
打开记事本或 VSCode,准备写脚本
第一步:创建 PowerShell 脚本 kill-port.ps1
复制以下完整脚本
保存注意事项
- 文件名:kill-port.ps1
- 修改日志目录(可自定义位置)
- 编码:UTF-8(带BOM)或 ANSI(避免中文乱码)
# kill-port.ps1
param(
    [string[]]$Ports,
    [switch]$Force
)
# 🔧 固定日志目录
$LogDir = "C:\Tools\PortKiller\logs"
$LogFile = "$LogDir\kill-port.log"
# ✅ 自动创建日志目录(如果不存在)
if (-not (Test-Path $LogDir)) {
    New-Item -ItemType Directory -Path $LogDir -Force | Out-Null
    Write-Host "[+] 日志目录已创建: $LogDir" -ForegroundColor DarkGray
}
function Write-Log {
    param($msg)
    "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | $msg" | Out-File $LogFile -Append -Encoding UTF8
}
function Confirm-Kill {
    param($processes)
    if ($Force) { return $true }
    Write-Host "`n[?] 发现以下进程:" -ForegroundColor Yellow
    $i = 1
    foreach ($p in $processes) {
        Write-Host "  $i. PID: $($p.PID) | 名称: $($p.Name) | 路径: $($p.Path)" -ForegroundColor White
        $i++
    }
    Write-Host ""
    $choice = Read-Host "是否终止以上 $($processes.Count) 个进程? (Y/N)" 
    return ($choice -match '^[Yy]$')
}
function Kill-Port {
    param($port)
    try {
        $connections = Get-NetTCPConnection -LocalPort $port -ErrorAction Stop
    } catch {
        Write-Host "[✓] 端口 $port 未被占用" -ForegroundColor Green
        return
    }
    $procs = @()
    foreach ($conn in $connections) {
        $procId = $conn.OwningProcess
        $proc = Get-Process -Id $procId -ErrorAction SilentlyContinue
        if ($proc) {
            $procs += [PSCustomObject]@{
                PID  = $procId
                Name = $proc.ProcessName
                Path = $proc.Path
            }
        }
    }
    $uniqueProcs = $procs | Sort-Object PID -Unique
    if ($uniqueProcs.Count -eq 0) {
        Write-Host "[!] 端口 $port 占用进程信息获取失败" -ForegroundColor Red
        return
    }
    if (-not (Confirm-Kill $uniqueProcs)) {
        Write-Host "[!] 已跳过端口 $port" -ForegroundColor Gray
        return
    }
    foreach ($p in $uniqueProcs) {
        $msg = "正在终止 PID $($p.PID) ( $($p.Name) ) ..."
        Write-Host $msg -ForegroundColor Magenta -NoNewline
        try {
            Stop-Process -Id $p.PID -Force -ErrorAction Stop
            Write-Host " ✅" -ForegroundColor Green
            Write-Log "KILLED | Port: $port | PID: $($p.PID) | Name: $($p.Name)"
        } catch {
            $errMsg = $_.Exception.Message
            Write-Host " ❌ $errMsg" -ForegroundColor Red
            Write-Log "FAILED | Port: $port | PID: $($p.PID) | Error: $errMsg"
        }
    }
}
# ===== 主程序开始 =====
do {
    Clear-Host  # 可选:每次循环清屏,界面更干净
    Write-Host "=== 🚀 智能端口杀手 ===" -ForegroundColor Cyan
    if (-not $Ports) {
        $input = Read-Host "请输入端口号(多个用空格分隔,如 3000 8080)"
        $Ports = $input -split '\s+' | Where-Object { $_ -match '^\d+$' }
    }
    if ($Ports.Count -eq 0) {
        Write-Host "[!] 未输入有效端口号" -ForegroundColor Red
        Start-Sleep -Seconds 2
        continue  # 重新开始循环
    }
    foreach ($port in $Ports) {
        Write-Host "`n[+] 正在检查端口: $port" -ForegroundColor Blue
        Kill-Port $port
    }
    Write-Host "`n=== 🎯 操作完成 ===" -ForegroundColor Cyan
    # ========== 新增:循环菜单 ==========
    Write-Host ""
    Write-Host "请选择下一步操作:" -ForegroundColor Yellow
    Write-Host "  1. 退出"
    Write-Host "  2. 继续查杀其他端口"
    Write-Host ""
    $choice = Read-Host "请输入选择 (1 或 2)"
    if ($choice -eq '1') {
        Write-Host "`n感谢使用,再见!👋" -ForegroundColor Green
        break  # 退出循环
    } elseif ($choice -eq '2') {
        $Ports = $null  # 清空端口,下次循环重新输入
        continue        # 继续下一轮
    } else {
        Write-Host "[!] 无效选择,默认继续..." -ForegroundColor Red
        Start-Sleep -Seconds 1
        $Ports = $null
        continue
    }
} while ($true)  # 无限循环,直到用户选择退出
第二步:创建快捷方式(带参数,推荐方式)
创建快捷方式
1、在桌面或文件夹 → 右键 → 新建 → 快捷方式
2、在“请键入项目的位置”中,粘贴:
powershell.exe -ExecutionPolicy Bypass -File "C:\Tools\PortKiller\kill-port.ps1"
3、点击 “下一步”
4、输入名称 PortKiller (可自定义)
5、点击 “完成”
设置“以管理员身份运行”
右键刚创建的快捷方式 → 属性 → 快捷方式 → 高级
勾选 ”用管理员身份运行“
创建其他常用快捷方式(可选)
| 名称 | 目标命令 | 
|---|---|
| 杀端口8080 | powershell.exe -ExecutionPolicy Bypass -File "C:\Tools\PortKiller\kill-port.ps1" -Ports 8080 | 
| 强制杀3000 | powershell.exe -ExecutionPolicy Bypass -File "C:\Tools\PortKiller\kill-port.ps1" -Ports 3000 -Force | 
| 杀3000和8080 | powershell.exe -ExecutionPolicy Bypass -File "C:\Tools\PortKiller\kill-port.ps1" -Ports 3000,8080 | 
测试运行
双击创建的快捷方式
出现power shell界面 → 输入需要关闭的进程相对应的端口
查看日志
打开:
C:\Tools\PortKiller\logs\kill-port.log
应该能看到操作记录!
清理与维护
- 日志文件会自动增长,定期可手动清空或删除
- 脚本可随时用记事本修改(比如改默认端口、加新功能)
- 快捷方式可拖到桌面、任务栏、开始菜单,随用随点
 
                   
                   
                   
                   
                             
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   2万+
					2万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            