目錄
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