批處理文件主要的功能是依次執(zhí)行多個命令行語句,可以減少一些繁復(fù)的工作。但是它也有一些語言特性,比如變量、控制等。
可以專門為bat文件建一個文件夾添加到環(huán)境變量里,將一些腳本放進(jìn)去,就可以在任何位置使用了。
簡單例子
比如部分朋友可能對下面的Git使用方式很眼熟:
git add .
git commit -m "some message"
git push
里面除了some message是變化的,可以寫一個下面的腳本(比如起名gpush.bat**):
git add .
git commit -m "%1"
git push
@pause
之后就可以使用一句命令,自動執(zhí)行上面的操作了。(此處接受了一個參數(shù)作為提交信息)。
gpush $message`
內(nèi)容提要
- 語法層面
- 控制命令語句顯示(命令語句是否顯示在終端界面)
- 變量、控制語句(if、goto、pause、)
- 例子
- 計算器實現(xiàn)
語法層面
基本命令
-
rem,什么都不做,可用作注釋。 -
pause,暫停執(zhí)行,以雙擊形式打開.bat文件,可以在最后加上pause避免執(zhí)行結(jié)束直接關(guān)閉終端。
命令語句顯示
區(qū)分命令語句和輸出,命令語句就是你批處理文件里寫的每一行代碼,輸出一般是
echo命令的執(zhí)行效果。比如下圖關(guān)閉和打開命令語句的輸出對比:
不顯示命令與顯示命令的對比
首先理解一點(diǎn),默認(rèn)情況下,所有命令語句都會顯示的,包括if判斷、變量賦值等。
-
@,@開頭表示這條語句不顯示在終端界面。 -
echo,后跟on/off時,表示打開/關(guān)閉全局命令語句的輸出。其他時候,表示輸出一些東西到控制臺(也可以輸出到指定文件里)。echo命令一般都跟@連用,以保證自己不會顯示在終端。
變量
- 腳本名后跟一些參數(shù),在腳本里可以使用
%+數(shù)字的形式訪問,%0指腳本名。比如之前使用的gpush message,%0就是gpush,%1就是message。 - 腳本運(yùn)行中的參數(shù),使用
set設(shè)置,%{name}%訪問:
有一些特殊用法:set a=12 echo %a%- 將用戶輸入設(shè)置為變量
set /p {name}=提示信息:(注意:)set /p a=請輸入?yún)?shù)1: - 算術(shù)運(yùn)算,比如將a+b的值賦給result變量
set /a result = %a% + %b%
- 將用戶輸入設(shè)置為變量
條件和控制
-
if,if "{變量}"=="值" -
goto,可以直接跳轉(zhuǎn)到指定位置,位置需要以:開頭;比如下面要求用戶必須輸入y/n才可以結(jié)束(end位置),否則就回到初始位置(start位置)::start set /p agree=是否同意(y/n): if "%agree%"=="y" goto end if "%agree%"=="n" goto end goto start :end pause
例子
-
加減法計算器
可以輸入(
+/-)選擇執(zhí)行加法還是減法,輸入錯誤會報錯。然后獲取兩個用戶輸入,輸出計算結(jié)果。最后讓用戶可選回到開始位置繼續(xù)計算。@echo off :start set /p action=請選擇計算(+/-): if "%action%"=="+" goto add if "%action%"=="-" goto sub goto action_error :action_error @echo 操作錯誤,只支持(+/-)兩種操作 @goto end :add set /p a=請輸入?yún)?shù)1: set /p b=請輸入?yún)?shù)2: set /a result=%a%+%b% goto result :sub set /p a=請輸入?yún)?shù)1: set /p b=請輸入?yún)?shù)2: set /a result=%a%-%b% goto result :result @echo 計算結(jié)果:%a%%action%%b%=%result% :end set /p toStart=繼續(xù)請輸入1: if "%toStart%"=="1" goto start @pause
