@echo off & setlocal EnableDelayedExpansion
echo 启动脚本......
echo 关闭进程......
set obj[0]=8082
set port=0
set pid=0
for /f "usebackq delims== tokens=1-2" %%a in (`set obj`) do (
set port=%%b
for /f "tokens=5" %%m in ('netstat -aon ^| findstr ":%%b"') do (
set pid=%%m
)
if "!pid!"=="0" (
echo 端口号【!port!】没有占用
) else (
echo 端口号【!port!】相关进程已杀死
)
set pid=0
)
echo 备份原jar包......
set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set bak_name=generator_%timestamp%
copy D:\ideaproject\generator-jar\generator.jar D:\ideaproject\generator-jar\bak\%bak_name%.jar
echo 删除原jar包......
del D:\ideaproject\generator-jar\generator.jar
echo 复制新jar包......
copy D:\ProgramData\Jenkins\.jenkins\workspace\generator-jar\target\generator.jar D:\ideaproject\generator-jar\generator.jar
rem echo 启动jar包......
rem call D:\ideaproject\generator-jar\startJar.bat
exit
脚本处理步骤
1.设置端口
set obj[0]=8766
set obj[1]=9999
2.循环要处理的端口obj
for /f “usebackq delims== tokens=1-2” %%a in (set obj
) do ()
3.查找端口占用的进程pid
for /f “tokens=5” %%m in (‘netstat -aon ^| findstr “:%%b”’) do (
set pid=%%m
)
4.杀死进程pid
taskkill /f /pid !pid!
5.备份jar,复制新jar,调用启动脚本
rem call D:\timingtask\start_timingtask.bat
setlocal enabledelayedexpansion
- 在批处理中,我们可以用setloacl ENABLEDELAYEDEXPANSION这个命令来启用"延迟环境变量扩展"
- 在我们启用了"延迟环境变量扩展"后,当CMD在解释涵有嵌套格式的命令时,他会把嵌套的命令一条一条的先执行一次,然后再进行匹配操作
- 在"延迟环境变量扩展"启用后,CMD会用!号来判断这是不是一个变量,如没启用来变量用%name%这样的格式判断,启用后就用!name!这样的格式判断
@echo off
- @echo off表示执行了这条命令后关闭所有命令(包括本身这条命令)的回显
- @的作用就是关闭紧跟其后的一条命令的回显
- @echo off执行以后,后面所有的命令均不显示,包括本条命令
pause
- pause也是一条命令,作用就是使程序暂停,也就是输出“请按任意键继续…”的原因。
- 调试中使用
bat脚本输出乱码
使用editplus,另存以ANSI编码保存
startJar.bat脚本
@echo off
start javaw -jar D:\ideaproject\generator-jar\generator.jar
exit
- java和javaw两个应用程序都能运行你的程序,并非常相似,但是有一个重要的区别,java通过控制台运行,javaw则不是。
- javaw会使用与java不同的Local配置进行工作,导致了一些中文问题,而java就是好好的。