windows命令腳本入門
一些常用的點(diǎn)
@echo off
:一般放文件頭部關(guān)閉回顯,如果想打開回顯則echo on
迂尝;
``
@setlocal enabledelayedexpansion
:使用延遲變量鞠评,使用場景:
for %%i in (1,1,3) do (
set k=%%i
echo !k! %%i
)
變量k
是for循環(huán)中的臨時(shí)變量茂蚓,要正常使用這段代碼,必須用!!
包裹住臨時(shí)變量,而不是用%%
煌贴。
call
:調(diào)用另一個(gè)批處理程序御板,并且不終止父批處理程序(如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令)牛郑。
start
:開啟一個(gè)新窗口(進(jìn)程)運(yùn)行一個(gè)程序怠肋。
注意區(qū)分call
和 start
的用途,call的用處是調(diào)用另一個(gè)批處理程序淹朋,并且終止父批處理程序笙各,只有該批處理執(zhí)行完才會往下走,而start 是另開 一個(gè)窗口(/b狀態(tài)不彈框)础芍,并且不終止父批處理程序杈抢。
一個(gè)實(shí)例demo
自己寫一個(gè)自動用maven打包和運(yùn)行多個(gè)server的批處理文件:
假設(shè)目錄結(jié)構(gòu)大致如下
packAndrun.cmd
結(jié)構(gòu)大致如下
@echo off
@setlocal enabledelayedexpansion
清理并install整個(gè)目錄
call mvn clean install -D maven.test.skip=true
依次打包各個(gè)目錄
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 ..
先殺掉正在運(yùn)行的進(jìn)程
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 根據(jù)進(jìn)程ID,kill進(jìn)程
taskkill /f /pid !pid!
)
)
分別啟動服務(wù)器
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"