介紹
批處理(Batch),也稱爲批處理腳本。顧名思義,批處理就是對某對象進行批量的處理。批處理文件的擴展名爲 bat
批處理文件,或稱爲批處理程序,是由一條條的DOS命令組成的普通文本文件,可以用記事本直接編輯或用DOS命令創建
批處理可以在dos系統或windows系統上運行,所以批處理的命令比dos的命令要多,基本都是dos命令組成,但多了些流程控制命令
創建批處理文件
使用copy con命令創建
啓動命令行,默認來到用戶目錄,運行 copy con
來創建批處理文件,將屏幕上輸入的內容保存在 test.bat 中,使用 ctrl + z,然後按回車來保存
輸入 test.bat
可以直接運行,如果當前目錄下不存在 a.txt
echo hello> a.txt
可以創建 a.txt 內容爲 hello,使用 dir
來查看當前目錄下文件看是否創建成功,如果存在 a.txt
使用記事本創建
新建 test.txt,內容如下,保存後,修改後綴 .txt 爲 .bat
打開 cmd 運行
語法
echo
echo [message]
:顯示信息
echo {[on/off]}
:開/關回顯功能,如果將@echo off`放最前面,將不會顯示命令本身,只顯示輸出結果
其中 type
可以顯示文本文件的內容
echo on
type a.txt
echo off
echo Hello
可以看出,echo off 關閉回顯(但其本身仍然會回顯), 接下來的命令行不會回顯
@
@
用於關閉本命令回顯,@
並不受echo狀態的影響,例如 @echo on
,這條命令不顯示,@type a.txt
這條命令不顯示,但命令執行結果(查看a.txt內容)會顯示。
@echo on
@type a.txt
echo off
echo Hello
@
只針對當前行有效,echo on/off
針對後邊的命令有效,直到下一個 echo on/off
命令出現
pause
pause
用於暫停批處理的執行器並給出提示信息,然後由用戶決定是繼續執行還是終端執行
@echo off
echo pause命令測試...
pause
echo Hello World
執行pause以後會提示一句話【按任意鍵繼續執行】
①當我們按任意鍵的時候,繼續執行pause後面的語句,也是說繼續執行
②當我們按ctrl+C的時候,會提示出,是不要終止批處理的提示,並且這個時候可以選擇是繼續還是終止
call
call
命令用來從一個批處理腳本中調用另一個批處理腳本,並且能夠調用指定標號後的命令(注意調用時必須在標籤名前加冒號)。調用完畢後回到調用處繼續執行後邊的命令,這也就是爲什麼 A 後邊的內容輸出了兩遍,看例子:
test.bat內容
@echo off
echo 正在調用called.bat...
call called.bat
echo 調用完畢called.bat...
echo 現在調用 A 標號後的內容...
call :A
:A
echo This is A
called.bat內容
@echo off
echo This is called.bat
rem
rem
爲註釋命令,該命令後的內容不被執行,但能回顯
在 test.bat 中列出 後綴爲 .bat 的文件
@echo off
rem 這是一個簡單的批處理命令
dir *.bat
當 剛纔的第一行 改爲 @echo on
,rem 能回顯,但實際執行的時候,計算機會忽略 rem 這一行
set
set
是專門用來創建、設置、查看或刪除環境變量
@echo off
set xxx="C:\Users\00lix\Desktop\test\video"
set yyy="D:\KuGou"
echo 顯示以x開頭的變量
set x
dir /w %xxx%
rem 刪除名爲xxx的變量
set xxx=
解釋下 命令。首先 使用 set 變量=值
爲 xxx 和 yyy 分別賦值,也就是兩個路徑
然後使用 set 參數
來顯示該變量或以該字符串爲前綴的變量
dir /w
以寬格式顯示列表,在每一行上最多顯示 5 個文件名或目錄名
最後使用set 變量名=
刪除該變量,注意:等號後面不能有空格
goto
goto label
跳轉到要執行的標籤,標籤由冒號與標籤名組成
- 多個標籤之間要加上exit終止程序繼續向下運行
- 同名的標籤,程序執行最上面的一個
- 標籤名必須是常量,不能是變量
- 標籤名中可使用空格,但不得包括其他分隔符(例如分號或等號)
- 命令只使用標籤的前八個字符
@echo off
echo 跳過中間的命令,執行最後一條
goto last
echo 111
echo 222
:last
echo 333
start
啓動單獨的“命令提示符”窗口來運行指定程序或命令。如果在沒有參數的情況下使用,start 將打開第二個命令提示符窗口,命令格式如下,還有很多參數,自行百度
start ["title"] [/WAIT][command/program]
“title”:在窗口標題欄中顯示的標題
WAIT:啓動應用程序並等候它結束
@echo off
echo 將在新窗口中顯示a.txt的內容
start "a.txt"的內容 /wait type a.txt
echo 已從新命令窗口返回
運行程序後,打開了新窗口執行了命令,因爲加了 /wait ,所以把新窗口關閉後,才能回到第一個窗口繼續執行
if
如果 if 後面判斷爲真後,只處理單句命令的話,直接跟在 後面就可以
如果 判斷爲真後,需要執行多條命令的話,則需要用括號將多條命令擴起來
注意: 括號“(” 要位於跟 if 同一行,如果不在同一行的話執行時會報語法錯誤
注意2:多層嵌套的if語法如下
if exist a.txt (
if exist 1.txt (
echo 存在 a.txt 和 1.txt
) else (
echo 存在 a.txt 但是不存在 1.txt
)
) else if exist b.txt (
echo 不存在 a.txt 但是存在 b.txt
) else (
echo 不存在 a.txt 和 b.txt
)
如果你要將 else if 換行,需要在 “)” 後面添加 “^” 符號。
用法1:判斷文件是否存在
@echo off
if exist a.txt (echo 存在a.txt) else (echo 不存在a.txt)
用法2:判斷某兩個字符串是否相等
@echo off
if "abc"=="abc" (echo 相等) else (echo 不相等)
默認情況if語句是區分大小寫,可以添加/i
參數取消大小寫區分
@echo off
if /i "ABC"=="abc" (echo 相等) else (echo 不相等)
運行結果
用法3:判斷數值是否相等
EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於
@echo off
if 1 equ 2 (echo 1和2相等) else (echo 1和2不相等)
用法4:判斷某個變量是否已經被賦值
@echo off
set var1=123
if defined var1 echo var1被定義了,值爲%var1%
if defined var2 (echo var2被定義了) else (echo var2沒被定義)
用法5:if結合errorlevel使用
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值
環境變量errorlevel的初始值爲0,當一些命令執行不成功,就會返回一個數值,如:1 ,2 等
for
@echo off
set /a sum=0
for %%x in (*.txt) do (
echo %%x文件內容如下:
type %%x
echo.
set /a sum=sum+1
)
echo 一共顯示了%sum%個文本文件
set /a
是指定一個變量等於一串運算字符
echo.
相當於我們打字時按了一下回車
%%x
是for語句中對形式變量的引用
setlocal
啓動批處理文件中環境變量的本地化。本地化將持續到出現匹配的 endlocal 命令或者到達批處理文件結尾爲止
@echo off
setlocal
path=d:\
echo 局部環境變量path的值:
set path
endlocal
echo 系統環境變量path的值:
set path
set path
是查看path環境變量的值
shift
更改批處理文件中可替換參數的位置
語法:Shift [/n]
設置批處理從第n個參數開始移位,n的值爲0~8
@echo off
:round
if "%0"=="" goto end
echo %0內容如下:
type %0
echo.
shift
goto round
:end
首先是一個 round 標籤,先判斷第一個參數是否爲空,如果爲空則表示沒提供參數,程序直接結束
參數不爲空時,顯示文件內容
遇到shift時, shift 將所有參數往前移動一位
%0 是第一個 test.bat
%1 是 a.txt
%2 是 b.txt
…
* 和 ?
*
表示任意多個字符,包括0個
?
表示任意單個字符
@echo off
if exist *.txt echo 當前文件夾下有文本文件
echo 以a開頭的目錄如下:
dir /d /w /b a*
echo.
echo 以dk開頭、第三個字符爲任意字符、第四個字符爲t、擴展名爲三個字符且以do開頭的文件如下:
dir /b /w dk?t.do?
dir 的參數可以使用 dir /?
來查看
<、>、>>
這批處理程序中的3個重定向符號,用於控制數據的輸入或輸出方式。<
符號的右邊是數據源,左邊代表數據目的地;>
及>>
符號的左邊是數據源,>
會替換目的數據,而>>
符號是將數據源添加到目標數據之後
@echo off
echo 正在自動創建的批處理...
echo type a.txt > auto.bat
echo dir /b /w >> auto.bat
echo 被自動創建的auto.bat文件的內容如下:
type auto.bat
echo.
echo 排序後的auto.bat爲:
sort < auto.bat
打開新創建的 auto.bat,內容如下:
echo type a.txt > auto.bat
是把 type a.txt
輸入到 auto.bat 中,替換
echo dir /b /w >> auto.bat
是把 dir /b /w
追加到 auto.bat 中
sort < auto.bat
是把 auto.bat 的內容 傳遞給 sort 進行排序
|
管道符|
將一個命令的輸出數據提取出來,然後將提取的數據作爲另一個命令的輸入
@echo off
find "naughty" story.txt | sort > result.txt
echo 對包含“naughty”單詞的行排序後如下:
type result.txt
其中 story.txt 內容如下:
批處理首先在“story.txt"文件中找出所有包含“naughty”的行,接着將找出的結果通過|
傳給“sort" 命令進行排序,最後將排序結果保存到“result.txt" 文件