初識bat:基本語法,記錄使用到的場景

目錄

BAT

命令

註釋

當前路徑

跳轉目錄

隱藏窗口

執行命令

輸入輸出

修改文件內容

完整bat


​​​​​​​

BAT

第一次使用bat,記錄下常用的一些語法。

參考:

https://blog.csdn.net/mycoolx/article/details/50251705

https://my.oschina.net/superkangning/blog/528881

命令

註釋

 @echo off
 ::echo是用來原樣輸出的 off是說這個不輸出
 ::一個冒號是定位使用。兩個冒號是註釋
 ::這是一個註釋

 

當前路徑

 echo 當前盤符和路徑:%~dp0
 ::%cd%也是代表當前路徑
 ::但是%cd%會隨着cmd執行的路徑改變而改變。比如在c盤下打開cmd,執行d盤下的bat,路徑就變成c:而不是d:
 :: 設置變量存儲當前路徑,用於跳轉目錄使用
 set parentFolder=%~dp0

跳轉目錄

 :: 不能寫成cd mysql  識別不了
 cd /d  MySQL

 

隱藏窗口

 ::看不見cmd窗口
 if "%1" == "h" goto begin 
 mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit 
 :: /C 代表  /Close   執行完後關閉cmd
 :: /K 代表 /Keep的簡寫   執行完後保留cmd
 :: cmd /c  xxxxxx
 :: cmd /k  xxxxxx

 

執行命令

 ::打開記事本
 call notepad
 ::執行其他bat
 ::注意 <nul的使用, 因爲執行安裝mysql服務之後,會停在那,顯示"點擊任何按鍵繼續"就不會執行後續bat了,
 ::<nul能實現向控制檯在那個時候輸入空,使其繼續向下執行。
 call mysql_serviceinstall.bat <nul
 ​
 ::call會等待執行完成
 ::start相當於另開一個線程(新窗口)執行,不用等待執行完成
 start java -jar "%parentFolder%"/gaois-0.0.1-SNAPSHOT.jar
 ::以不可改變瀏覽器地址形式打開地址 --app=xxx
 start chrome49.0.2623.112\chrome.exe --app=http://localhost:8004/common/get_version

 

輸入輸出

 >nul 表示把命令的執行結果提示信息輸出到空設備中,而這個空設備就像黑洞一樣,會吞噬所有進入它裏面的提示信息,所以,效果就是:提示信息被屏蔽掉了;
 <nul 表示從空設備中讀入信息,以for /f 語句中的 set /p str=%%i<nul 之類的用法爲常見

 

修改文件內容

因爲不知道用戶把exe安裝在那個位置,所以需要動態修改指定文件即my.ini中 basedir 和datadir的路徑

 @echo off
 set "pth=%~dp0"
 set "pth=%pth:\=/%"
 set "pth=%pth:~,-1%"
 (for /f "tokens=1,2* delims=:=" %%a in ('findstr /n .* my.ini') do (
   if "%%c" neq "" (
     if /i not "%%b"=="basedir" (
       if /i not "%%b"=="datadir" (echo,%%b=%%c
       ) else echo,%%b="%pth%/Data/"
     ) else echo,%%b="%pth%"
   ) else echo,%%b
 ))>$
 move $ my.ini

 

完整bat

startServer.bat

 @echo off
 echo 環境檢測中......
 echo 當前盤符和路徑:%~dp0
 :: 設置變量存儲當前路徑
 set parentFolder=%~dp0
 ​
 :: 驗證mysql
 cd /d  MySQL
 call my_ini_edit.bat
 :: start cmd /c mysql_servicestart.bat
 call mysql_serviceinstall.bat <nul
 ​
 :: 返回父級
 echo =======mysql success
 cd /d "%parentFolder%"
 :: 驗證java
 cd /d  jre1.8.0_131/bin
 echo 當前盤符和路徑:%~dp0
 java -version
 :: 執行jar
 ::call java -jar "%parentFolder%"/gaois-0.0.1-SNAPSHOT.jar -n 3000 >nul
 start java -jar "%parentFolder%"/gaois-0.0.1-SNAPSHOT.jar
 echo ==========success========
 :: echo 程序正在啓動中......
 ​
 ::等待x秒
 echo CreateObject("Scripting.FileSystemObject").DeleteFile(WScript.ScriptFullName) >%Temp%\Wait.vbs
 ::15s
 echo wscript.sleep 15000 >>%Temp%\Wait.vbs
 start /wait %Temp%\Wait.vbs
 :: 打開瀏覽器
 cd /d "%parentFolder%"/chrome49.0.2623.112
 start chrome.exe --app=http://localhost:8004/common/get_version
 ​

 

stopServer.bat

根據指定端口去找pid,關閉進程

netstat -ano|findstr "0.0.0.0:%port%" 正常是這樣的,不需要^,放在bat裏面就需要,可能是轉義之類的吧

@echo off
@set port=8004
@echo %port%

for /f "tokens=1-5" %%i in ('netstat -ano^|findstr "0.0.0.0:%port%"') do taskkill /pid %%m  -f
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章