程式設計師需要懂點的批處理命令之bat(1.0)

小5蟲子發表於2018-09-04

前言

在我們開發過程中,經常會遇到切換環境,重啟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啟動訪問,至於為什麼,這裡不解釋,就是必須要用nginxnginx裡面的轉發需要呼叫後臺介面,而呼叫的環境經常變化,這樣就需要先修改代理介面環境地址,然後重啟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,如有錯誤,歡迎指出,共同進步;


參考連結:

相關文章