Windows环境启动与停止jar批处理命令脚本

一个简单的windows环境jar包部署后台运行和通过端口号停止进程,记录一下,做一下相关知识储备。

1.部署jar包,后台运行

在jar包同级目录下创建一个.txt文件,将下列代码复制进去,xxx.jar替换为你的jar名称,最后将.txt改为.bat即可。

@echo off
start /b java -jar xxx.jar -Dfile.encoding=utf-8 > start.log 2>&1
exit

逐句拆解

  1. @echo off
    关闭命令回显,让批处理运行时不把每一条命令本身打印出来。
  2. start /b java -jar xxx.jar -Dfile.encoding=utf-8 > start.log 2>&1
  • start /b —— 在后台启动新进程(不弹独立窗口,与当前控制台共用窗口)。
  • java -jar xxx.jar -Dfile.encoding=utf-8 —— 真正要跑的程序:以 UTF-8 编码方式启动 jar 包。
  • > start.log 2>&1 —— 标准输出、标准错误都重定向到当前目录下的 start.log 文件。
  1. exit
    批处理自身立即退出,不再等待 java 进程。由于 java 已被 start 扔进后台,因此即使批处理窗口关闭,java 也会继续运行。

2.通过端口号停止进程

如果要bat窗口中手动输入端口号就改成下面这种(重启命令同理):

set /p port=请输入要停止的端口号:

下面假设端口是8080

@echo off
chcp 65001
set port=8080

for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
	echo kill the process %%m who use the port
	taskkill /pid %%m -t -f
	goto q
)

:q

逐句拆解

  1. @echo off
    关闭命令回显,脚本运行时不把每一条命令本身打印出来。

  2. chcp 65001
    把当前控制台代码页改成 UTF-8,后续输出的中文不会乱码。

  3. set port=8080
    定义变量 port,值为 8080,后面拿来当端口号匹配。

  4. for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (

    • 启动子进程执行 netstat -ano,列出所有连接与 PID。

    • 结果通过管道交给 findstr,只保留包含 :8080 的行。

    • tokens=1-5 表示把每行按空格拆成 5 段,依次装进 %%i %%j %%k %%l %%m

    • 其中 %%m 正好就是最后一列——占用该端口的进程 PID。

  5. echo kill the process %%m who use the port
    打印提示信息,告诉用户马上要杀掉哪个 PID。

  6. taskkill /pid %%m -t -f
    强制(-f)连同子树(-t)一起终止指定 PID。

  7. goto q
    只要找到第一条占用 8080 的进程并杀掉,就立刻跳出整个循环,不再继续搜索。

  8. :q
    标签,循环跳转或脚本自然执行到此结束。

一句话总结
自动查找第一个占用 8080 端口的进程,强制杀掉后立刻退出,不重复处理其余可能存在的同名端口连接。

3.通过端口号重启进程

@echo off
set port=8080
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
	echo kill the process %%m who use the port
	taskkill /pid %%m -t -f
	goto start
)
:start

start /b java -jar xxx.jar -Dfile.encoding=utf-8 > start.log 2>&1 

注:重启也可以以引用的方式,先执行停止脚本再执行启动脚本完成重启
例如:
需要保证 start.batstop.batrestart.bat 放在同一目录即可。
最小可运行的 restart.bat 只需三行:

@echo off
call "%~dp0stop.bat"
call "%~dp0start.bat"

解释

  1. %~dp0 表示“当前批处理所在目录”,自带结尾反斜杠,能兼容空格/中文路径。

  2. call 而不用 start,目的是让 stop.batstart.bat 在当前进程顺序执行;
    若用 start 会另开进程,可能导致 start.batstop.bat 还没结束时就运行。

  3. 如果 stop.batstart.bat 里已经写了 exit,记得把 exit 改成 exit /b
    否则整个 CMD 窗口会被直接关掉。

chcp 是 Windows 系统下的一个命令,用于更改当前的活动代码页。使用 chcp 命令可以更改命令提示符窗口或批处理文件所使用的代码页,修改编码格式,解决中文乱码问题。

代码页编号代码页名称
437美国 MS-DOS
936简体中文(GB2312)
949韩文
950繁体中文(Big5)
1252西欧语言
65001Unicode (UTF-8) 编码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckyTHP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值