lee 1473 0 2017-02-14 15:40:17

文章位置:左搜> 编程技术> 正文
Windows系统查看端口占用
 
@echo off
setlocal EnableDelayedExpansion

:menu
rem cls命令清除屏幕内容,类似Linux中clear命令
cls
echo =======================================
echo =                                     =
echo =        端口占用查询工具             =
echo =                                     =
echo =  1.查询端口占用情况                 =
echo =                                     =
echo =  2查看所有使用中的端口              =
echo =                                     =
echo =  0.退出                             =
echo =                                     =
echo =======================================
set /p chose="请选择:[1,2,0]"
if "%chose%" =="1" ( goto checkPort )
if "%chose%" =="2" ( goto showAllPort )
if "%chose%" =="0" (
	exit
	) else (
	echo 您确定选择了1或者2,要不再试试?
	pause
	goto menu
	)
	
:checkPort
cls
setlocal
rem 输入查询的端口号
echo.
set /p port="请输入一个端口号(如:8080):"
rem 执行netstat -aon | findstr "0.0.0.0:%port%"命令
rem 这里的^|为逆转字符
rem 通过for循环以及tokens的方式取出第2列和第五列
for /f "tokens=2,5" %%i in ('netstat -aon ^| findstr "0.0.0.0:%port%"') do (
	rem 判断第二列中的值是否与需要查询的值0.0.0.0:端口相等,如果相等就将第五列的数据即该端口进程所占用的系统进程号PID赋值给变量pid
    if "%%i"=="0.0.0.0:%port%" (
		echo.
		echo [提示]您本次查询的端口{%port%}占用进程号为:%%j
		echo.
		set pid=%%j
	)
)
rem 对变量pid的判断
if  "%pid%" == "" (
	rem 如果pid为空,表示该端口未被占用
	echo 端口未被占用
	) else (
	rem 如果pid不为空,查询该进程的详细信息
	for /f "tokens=1-5" %%i in ('tasklist ^| findstr "%pid%"') do (
		if "%%j"=="%pid%" (
		echo 映像名称                       PID 会话名              会话#       内存使用
		echo ========================= ======== ================ =========== ============
		echo %%i                       %%j      %%k              %%l         %%mKB
		)
	)
	
	set /p var="需要停止该进程吗[PID=%pid%]?(Y/n):"
	
	if /i "!var!" == "Y" (
		echo [提示]正在停止进程...
		taskkill /f /pid %pid%
		
	) else (
		echo [提示]您取消了停止进程或其他错误!
	)
	
)
endlocal
pause

goto menu

:showAllPort
cls
netstat -ano | findstr "0.0.0.0:"
pause
goto menu
rem Powered by xqdev.org xqlee
1
编程技术 端口