1、脚本内容如下:
@echo off & setlocal EnableDelayedExpansion
set obj[0]=7000
set port=0
set pid=0
for /f "usebackq delims== tokens=1-2" %%a in (`set obj`) do (
set port=%%b
for /f "tokens=4" %%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
)
D:
echo 准备启动程序
cd D:\**\**\
start D:\**\**\**.bat
echo 启动程序成功.
pause
///
可以看做事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就是例如7000
第二个for循环【for /f "tokens=4" %%m in ('netstat -aon ^| findstr ":%%b"') do (】就是从netstat -aon ^| findstr ":6001“【^是取消转义字符|,等同于命令行netstat -aon | findstr ":6001“】这个查所有端口占用情况中发现:7000这多行数据,这行数据第4列【"tokens=4"】就是pid
杀死pid【taskkill /f /pid !pid!】
注意如果程序占用的固定端口采用的是UDP协议 PID的列数是“4”,如果如果程序占用的固定端口是TCP协议则PID的列数是“5”需要将“【"tokens=4"】”改为“【"tokens=5"】”