Windows 使用批处理脚本快速释放被占用的端口
在前端开发中,我们经常会遇到端口占用的问题。特别是在开发环境中,如果开发工具意外关闭或者崩溃,往往会导致端口未正确释放,使我们无法再次使用同一个端口。
想要释放一个端口,我们需要先用命令查找端口占用的进程
netstat -ano|findstr 端口号
然后再用命令终止进程。
taskkill /PID 进程id /F
这些命令都不太常用而且不好记,要释放多个端口号更是麻烦。
为了解决这个问题,我用批处理脚本语言编写了一个脚本,用于快速查找并释放指定端口。
什么是 Windows 批处理脚本?
Windows 批处理脚本,也称 Batch Script 或 Batch File,是一种基于命令行的脚本语言,用于 Windows 操作系统中自动化执行一系列命令。批处理脚本文件的扩展名为 .bat
或 .cmd
,可以在命令提示符(CMD)中直接运行。
批处理脚本有以下主要特点:
- 流程控制:通过使用
if
、for
、goto
等语句,可以控制脚本的执行流程。 - 系统命令调用:可以执行 Windows 内置命令,如
netstat
(查看网络连接)、taskkill
(终止进程)等。 - 环境变量:可以使用
set
命令来设置或读取环境变量,灵活控制脚本的参数和执行。 - 自动化任务:批处理脚本主要用于自动化系统管理任务,例如文件操作、进程管理和网络任务。
在日常开发工作中,批处理脚本非常适合完成一些简单而重复的系统操作。
使用批处理脚本释放被占用的端口
1. 脚本实现
首先,我们需要一个可以快速查找并释放指定端口的脚本。这个脚本会询问用户输入的端口号,查找占用该端口的进程 ID,并自动终止该进程。
以下是完整的脚本代码(用中文可能会有编码乱码的问题,所以下面都用英文了):
@echo off
setlocal
:START
:: Prompt the user to enter a port number or type 'exit' to quit
set /p PORT=Enter the port number to free (or type 'exit' to quit):
:: Check if the user wants to exit
if /i "%PORT%"=="exit" (
echo Exiting script.
goto :END
)
:: Initialize PID variable
set "PID="
:: Find the process occupying the port
for /f "tokens=5" %%i in ('netstat -ano ^| findstr :%PORT%') do (
set "PID=%%i"
)
:: Check if PID was found
if defined PID (
echo Port %PORT% is occupied by process %PID%
:: Kill the process
taskkill /PID %PID% /F
echo Process %PID% occupying port %PORT% has been terminated
) else (
echo No process found occupying port %PORT%
)
:: Loop back to prompt for another port number
goto :START
:END
endlocal
pause
2. 脚本分解和功能说明
这个脚本的设计非常简单,但功能强大,能够帮助我们方便地释放端口。以下是关键步骤的解释:
-
循环输入端口号:
- 通过
:START
标签和goto :START
语句实现循环,允许用户连续输入多个端口号。 - 用户可以通过输入
exit
命令退出循环,结束脚本运行。
- 通过
-
检查端口占用的进程:
- 使用
netstat -ano | findstr :%PORT%
来查找占用指定端口的进程,并将其进程 ID 保存到变量PID
中。 for /f "tokens=5" %%i in (...) do (set "PID=%%i")
中的tokens=5
是为了提取netstat
命令输出中第 5 列的进程 ID(在某些情况下,PID 可能位于不同位置,具体取决于命令输出格式)。
- 使用
-
终止进程:
- 检查
PID
是否为空。若不为空,则说明找到了占用端口的进程。 - 使用
taskkill /PID %PID% /F
强制终止该进程,从而释放端口。
- 检查
-
错误处理:
- 如果没有找到占用指定端口的进程,则脚本会输出提示信息
No process found occupying port %PORT%
。 - 这种处理方式可以避免因端口未被占用而导致的错误。
- 如果没有找到占用指定端口的进程,则脚本会输出提示信息
如何运行脚本
-
保存脚本:将上面的代码保存为
killport.bat
。
-
运行脚本:双击运行
killport.bat
文件,按照提示输入端口号,脚本会自动查找并终止占用该端口的进程。原来需要启动8092端口,但是8092-8095的端口都被占用了,导致程序启动推到了8096端口
打开bat脚本,输入要释放的端口号
8092端口成功被释放,程序正常启动
-
退出脚本:在输入端口号时输入
exit
即可退出脚本。