windows命令脚本入门
一些常用的点
@echo off:一般放文件头部关闭回显,如果想打开回显则echo on;
``
@setlocal enabledelayedexpansion:使用延迟变量,使用场景:
for %%i in (1,1,3) do (
set k=%%i
echo !k! %%i
)
变量k是for循环中的临时变量,要正常使用这段代码,必须用!!包裹住临时变量,而不是用%%。
call:调用另一个批处理程序,并且不终止父批处理程序(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
start:开启一个新窗口(进程)运行一个程序。
注意区分call和 start的用途,call的用处是调用另一个批处理程序,并且终止父批处理程序,只有该批处理执行完才会往下走,而start 是另开 一个窗口(/b状态不弹框),并且不终止父批处理程序。
一个实例demo
自己写一个自动用maven打包和运行多个server的批处理文件:
假设目录结构大致如下

目录结构
packAndrun.cmd结构大致如下
@echo off
@setlocal enabledelayedexpansion
清理并install整个目录
call mvn clean install -D maven.test.skip=true
依次打包各个目录
cd server1
call mvn package spring-boot:repackage -D maven.test.skip=true
cd ..\server2
call mvn package spring-boot:repackage -D maven.test.skip=true
cd ..\server3
call mvn package spring-boot:repackage -D maven.test.skip=true
echo "pack success"
cd ..
先杀掉正在运行的进程
for %%I in (server1,server2,server3) do (
echo %%I
for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %%I`) do (
set pid=%%a
set image_name=%%b
)
if not defined pid (echo process %%I does not exists) else (
echo prepare to kill !image_name!
echo start kill !pid! ...
rem 根据进程ID,kill进程
taskkill /f /pid !pid!
)
)
分别启动服务器
start java -jar server1\target\server1-1.0-SNAPSHOT.jar --spring.profiles.active=local
start java -jar server2\target\server2-1.0-SNAPSHOT.jar --spring.profiles.active=local
start java -jar server3\target\server3-1.0-SNAPSHOT.jar --spring.profiles.active=local
echo "servers setup success"