前言
在我們開發過程中,經常會遇到切換環境,重啟
nginx
,或者執行一系列的dos命令等,頻繁的操作勢必會很繁瑣,浪費時間,作為一個程式設計師,重複的事情,當然要交給電腦了~
首先了解一下什麼是 .bat ?
批處理(Batch),也稱為批處理指令碼。顧名思義,批處理就是對某物件進行批量的處理。批處理檔案的副檔名為bat;
正文開始
以一個簡單的nginx啟動、重啟、停止說起:
1. 首先切換到nginx目錄,包含nginx.exe目錄;
2. 按住shift,滑鼠右鍵在此處開啟powershell視窗;
複製程式碼
nginx一般的三個操作如下:
描述 | 命令 |
---|---|
啟動 | start .\nginx.exe |
重啟 | .\nginx.exe -s reload |
停止 | .\nginx.exe -s stop |
注意:如果你不小心啟動了多次,那麼就會啟動多個nginx程式,你用stop不能全部停止;可以用如下命令:
taskkill /fi "imagename eq nginx.EXE" /f
殺掉所有的nginx程式;
接下來就展示如何使用bat批處理命令來做這個事情,先看下程式碼:
@echo off
:entry
cls
echo nginx一鍵操作命令集合:
echo ********************************
echo 1. 開啟nginx
echo 2. 重啟nginx
echo 3. 停止nginx
echo 4. 退出
echo ********************************
echo 請選擇你要執行的操作...
set /p userchoice=
if "%userchoice%"=="1" goto startN
if "%userchoice%"=="2" goto reloadN
if "%userchoice%"=="3" goto stopN
if "%userchoice%"=="4" goto quit
:startN
start .\nginx.exe
goto succ
:reloadN
.\nginx.exe -s reload
goto succ
:stopN
taskkill /fi "imagename eq nginx.EXE" /f
goto succ
:quit
exit
:succ
echo 執行成功
pause
goto entry
@echo on
複製程式碼
首先在上面說到的nginx目錄下,新建一個.bat檔案 ,將上述程式碼放進去就可以體會到一鍵操作了;
接下來大概說說程式碼set /p userchoice=
,意思是設定一個變數userchoice,值為使用者輸入;:startN :entry :succ
類似一個方法,判斷用輸入的值,執行對應的方法;批處理命令是一行一行的執行命令,執行完成後,就會關閉shell視窗,如果想保持可以使用 pause
會出現請按任意鍵繼續...;如此就完成了一個一鍵操作的指令碼,由於該檔案放在nginx的安裝目錄,為了方便,可以右鍵,傳送快捷模式到桌面;
bat進階-修改檔案
由於目前本地的專案是用
nginx
啟動訪問,至於為什麼,這裡不解釋,就是必須要用nginx
,nginx
裡面的轉發需要呼叫後臺介面,而呼叫的環境經常變化,這樣就需要先修改代理介面環境地址,然後重啟nginx
;
現在我們的bat
要執行修改檔案,然後重啟nginx
操作,程式碼如下(僅供參考)
@echo off
:entry
cls
echo *****系統一鍵切換環境*****
echo ********************************
echo 1. 開發dev01環境
echo 2. 開發dev02環境
echo 3. ---測試--01--環境
echo 4. ---測試--02--環境
echo ********************************
echo 請選擇你要切換環境...
set /p userInput=
if "%userInput%"=="1" goto dev01
if "%userInput%"=="2" goto dev02
if "%userInput%"=="3" goto test01
if "%userInput%"=="4" goto test02
:dev01
set cc=proxy_pass http://ys.dev01.51ju.cn; #tag
goto switch
:dev02
set cc=proxy_pass http://ys.dev02.51ju.cn; #tag
goto switch
:test01
set cc=proxy_pass http://ys.test.51ju.cn; #tag
goto switch
:test02
set cc=proxy_pass http://ys.test02.51ju.cn; #tag
goto switch
:switch
echo 正在切換中...
echo -------------------------
(for /f "tokens=*" %%i in (a.conf) do echo %%i|findstr /ie tag>nul&&echo %cc%||echo %%i)>temp.ini
move /y temp.ini a.conf
echo -------------------------
echo 已經切換至: %cc%
echo -------------------------
echo 開始重啟nginx...
cd ../../
.\nginx.exe -s reload
echo --------------------------
echo nginx 重啟成功~
cd D:\nginx-1.13.12\conf\servers\
echo --------------------------
pause
goto entry
@echo on
複製程式碼
大概原理同上,主要說明一下for
迴圈這個語句,
- 首先獲取到
a.conf
,然後迴圈每一行程式碼, %%i
相當於迴圈的當前行程式碼,|findstr
是在當前行查詢字串,/ie
忽略大小寫和從行末開始查詢;tag>nul
找到'tag'
時,就把這一行清空:echo %cc%
是將方法中設定的cc值複製到這一行;move -y
就是移動檔案到當前目錄並取消重寫檔案發出的提示;
注意: 預設配置中,需要修改的那一行命令需要新增一個標記tag。
以上就完成了對一個檔案的修改;修改檔案後,需要重啟nginx
,但是這個檔案的目錄和nginx
不在同一個目錄下,需要執行命令cd ../../
跳轉到nginx.exe的那個目錄,執行nginx重啟,由於切換命令要重複使用,當前目錄已經修改了,所以需要再跳轉回來cd D:\nginx-1.13.12\conf\servers\
;
娛樂一下
相信看過科幻片的同學都知道,電腦大神或者黑客操作電腦時,不斷的彈出dos
視窗,然後綠色程式碼滾屏,其實很簡單實現,原理如下:
@echo off
echo 當前在call目錄下
start "reload" cmd /k
cd /d D:\test
call reload.bat
echo over...
pause
複製程式碼
以上是在當前指令碼中,新開dos
視窗並呼叫其他目錄下的指令碼,如此迴圈重複,很簡單的就實現不斷開dos
視窗了,至於滾屏,結合echo輸出就可實現,pause
命令是,程式碼執行到這一行時,提示請按任意鍵繼續... 然後繼續執行命令;
ps: 第一次搗鼓bat
,如有錯誤,歡迎指出,共同進步;
參考連結: