bat实战总结

文章描述了如何使用Windows批处理脚本(.bat)来启动和关闭多个服务,包括mongo、java应用和nginx,确保每个服务在独立窗口运行且不影响日志。启动脚本还会自动打开浏览器并显示服务地址,且窗口在一段时间后自动关闭。关闭脚本则能依次停止服务并关闭窗口。

基础版本V1

以一个情景的方式来描述bat的实战情况:

需求情景

1. 启动命令时,一个cmd里启动好几个服务的情况下,前后启动互不影响,且独立窗口,不会影响到彼此的日志,同时,调用关闭命令会关闭各个服务对应的窗口:

1. 启动好几个,就按顺序启动脚本调用即可

2. 前后互不影响,则不要使用“&&"来连接就行,因为该符号的意思是指前边成功了才能执行后边的

3. 日志互不影响,则使用start /b 的方式来调用各个服务的启动命令

4. 各个窗口独立,则是要对每个独立服务的启动命令脚本,使用start /min的方式调用启动命令。

demo

A. 主脚本

启动脚本(start.bat),启动好几个服务:

@echo off
echo start mongo...
cd /d D:\mongo\MongoDB\Server\4.4\bin && start /b start.bat
echo start jfqqq...
cd /d D:\Program Files\Java\jdk-11.0.6\bin && start /b start.bat
echo start caddy...
cd /d D:\tools && .\caddy start
echo start all server finished...
关闭脚本(stop.bat)

cmd /k "cd /d D:\tools && .\caddy stop && cd /d D:\Program Files\Java\jdk-11.0.6\bin && stop.bat && cd /d D:\mongo\MongoDB\Server\4.4\bin && stop.bat"
exit

解释:

1. /b 的意思就是,后台启动服务,关闭该窗口不会影响被它启动的服务

2. caddy没有使用/b,也就等于是,caddy的日志会被输出到该当前cmd窗口中

3. && 前边的执行成功了才会执行后边的命令

B. java脚本

java服务的启动脚本:


start /min java -jar jfqqq.jar --server.port=8080 --spring.data.mongodb.uri=mongodb://127.0.0.1:27017/jfqqq

java服务的关闭脚本:


wmic process where "name like '%%java%%' and CommandLine like '%%jfqqq.jar%%'" delete

解释:

1. /min的意思就是启动独立的窗口

2. '%%%%'包裹住变量是因为:本来在cmd窗口中,写命令是一堆儿%即可,但是这里是放在bat脚本中,此时%会被认为是变量取值,所以再加一对儿%,来表明模糊匹配。

C. mongo脚本

mongo服务的启动脚本:


@echo off
start /min mongod --dbpath=E:\MongoData\jfqqq\data > mongod.nohup

mongo关闭脚本


wmic process where "name like '%%mongod%%' and commandLine like '%%jfqqq%%'" delete
exit

解释:

1. /min的意思就是启动独立的窗口

2. exit,推出窗口

基础版本V2

以一个情景的方式来描述bat的实战情况:

需求情景

一个启动脚本

0. 自动启动全部的服务,每个服务独立的窗口。

1. 随后,该命令窗口在一定时间后自动关闭。

2. 然后自动打开浏览器,并打开多个服务地址。

3. 命令窗口中输出中文描述

一个关闭脚本

0. 自动关闭全部的服务,并关闭对应的窗口

1. 随后,在一定时间后自动关闭。

demo

A. 主脚本

启动脚本

启动mongo, nginx, java程序(jar)

代码:


@echo off
echo start mongo...
cd /d E:\MongoData\4.4\bin && start /b start.bat
echo start nginx...
cd /d D:\nginx-1.22.1\nginx-1.22.1 && start /b nginx.exe
echo start jfqqq...
cd /d D:\Program Files\Java\jdk-11.0.6\bin && start /b start.bat
echo start all server finished...
chcp 65001
echo 自动打开浏览器...
cd /d C:\Program Files (x86)\Microsoft\Edge\Application\ && start /b msedge.exe http://localhost:8888/index.html localhost/a.html
echo 已经开启所有服务!本窗口将在6秒后自动关闭,你也可以手动关闭本窗口。
choice /t 5 /d y /n >nul
exit

解释:

1. start /b 后台运行

2. start /min 开启新的窗口运行

3. chcp 65001 切换为utf-8的文字编码

4. 浏览器.exe url1 url2: 连着传递多个服务地址url,空格隔开,浏览器就会把两个都打开。

关闭脚本

@echo off
echo stop jfqqq... && cd /d D:\Program Files\Java\jdk-11.0.6\bin && start /min stop.bat && echo stop jfqqq finished...
echo stop mongo... && cd /d E:\MongoData\4.4\bin && start /min stop.bat && echo stop mongo finished!
echo stop nginx... && cd /d D:\nginx-1.22.1\nginx-1.22.1 && start /min stop.bat
echo stop all finished! you can close thie window now.
chcp 65001
echo 已经关闭所有服务!本窗口将在6秒后自动关闭,你也可以手动关闭本窗口。
choice /t 5 /d y /n >nul
exit

B. mongo脚本

启动脚本

@echo off
start /min mongod --dbpath E:\MongoData\mongoDBData
exit
关闭脚本

@echo off
wmic process where "name like '%%mongod%%' and CommandLine like '%%mongoDBData%%'" delete
exit

解释:

1. 这里用的两对百分号:%%mongod%%。直接在cmd窗口中写的话,一对儿就够,但是这里放到了命令行里,一对儿会被当作加载变量来处理,所以需要再加一层百分号。

C. nginx脚本

启动脚本

@echo off
start nginx.exe
关闭脚本

@echo off
@REM nginx -s stop
wmic process where "name like '%%nginx%%'" delete
exit

D. java脚本

启动脚本

@echo off
start /min java -jar jfqqq.jar --logging.level.root=info --server.port=8080 --spring.data.mongodb.uri=mongodb://127.0.0.1:27017/jinfeng 
exit
关闭脚本

@echo off
wmic process where "name like '%%java%%' and CommandLine like '%%jfqqq.jar%%'" delete
exit

基础版本V3

需求情景

1. 上述两个基础版本的功能都包括

2. 全部程序和数据部署在硬盘上,要求硬盘随便插到任何一台windows都可以点击启动脚本进行启动

材料准备

java的jar包一个,用于访问mongo数据

mongo安装程序一个,用于部署mongo数据

google浏览器一个(可以直接把电脑里已经安装了的浏览器的程序打包出来)

前端程序一个,用于渲染界面,访问java接口的数据

nginx一个,用于发布前端程序

启动程序脚本一个,用相对路径的方式实现在硬盘中启动所有程序,从而避免盘符改变带来的问题

关闭程序脚本一个,用相对路径的方式实现在硬盘中启动所有程序,从而避免盘符改变带来的问题

demo1

只需要三个脚本:mongo关闭脚本,启动全部程序脚本,关闭全部程序脚本

mongo关闭脚本

 db = connect("localhost:27017/admin");
 db.shutdownServer();
 quit();

启动脚本

@echo off
REM chcp 65001
set basepath=./myPath

set path=%basepath%/mongodb/bin
echo start mongo...
cd %basepath%/mongodb/bin && start /b /min mongod.exe --config mongod.cfg
echo mongo finished!

echo 启动 nginx
REM cd %basepath%/nginx-1.22.1 && start /b /min nginx.exe
echo nginx 启动完毕!

echo 启动 java
REM cd %basepath%/jdk-11.0.6/bin && java /b /min -jar %basepath%/programs/server.jar
echo java启动完毕!

REM sleep for mongo and java
TIMEOUT /T 4
echo 启动浏览器

echo 浏览器启动完毕!

关闭脚本

#echo off
set basepath=./shentu
cd /d %basepath%/mongodb/bin && mongo mongo_stop.js
echo mongo stoped...

@REM nginx -s stop
wmic process where "name like '%%nginx%%'" delete
ECHO.已关闭所有 nginx 进程

wmic process where "name like '%%java%%' and CommandLine like '%%server.jar%%'" delete
ECHO.已关闭所有 java 进程


pause

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值