
1.自动重启的脚本如下:(比如打开一个端口7000来启动device.jar,想要重启device.jar)
@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 ) # 重启改端口所创建的进程(隐藏方式) start /b device.jar
可以看做事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"】”