前言
批處理檔案(batch file)包含一系列 DOS指令,通常用于自動執行重複性任務。使用者隻需輕按兩下批處理檔案便可執行任務,而無需重複輸入相同指令。編寫批處理檔案非常簡單,但難點在于確定一切按順序執行。編寫嚴謹的批處理檔案可以極大程度地節省時間,在應對重複性工作時尤其有效。
在Windows中善用批處理可以簡化很多重複工作
更新記錄
2016年03月29日 - 初稿
閱讀原文 - http://wsgzao.github.io/post/windows-batch/
擴充閱讀
如何編寫批處理檔案 - http://zh.wikihow.com/編寫批處理檔案
批處理常用指令總結 - http://xstarcd.github.io/wiki/windows/windows_cmd_summary.html
什麼是批處理
批處理(Batch),也稱為批處理腳本。顧名思義,批處理就是對某對象進行批量的處理。批處理檔案的擴充名為bat。
目前比較常見 的批處理包含兩類:DOS批處理和PS批處理。PS批處理是基于強大的圖檔編輯軟體Photoshop的,用來批量處理圖檔的腳本;而DOS批處理則是基于DOS指令的,用來自動地批量地執行DOS指令以實作特定操作的腳本。這裡要講的就是DOS批處理。
批處理是一種簡化的腳本語言,它應用于DOS和Windows系統中,它是由DOS或者Windows系統内嵌的指令解釋器(通常是COMMAND.COM或者CMD.EXE)解釋運作。類似于Unix中的Shell腳本。批處理檔案具有.bat或者.cmd的擴充名,其最簡單的例子,是逐行書寫在指令行中會用到的各種指令。更複雜的情況,需要使用if,for,goto等指令控制程式的運作過程,如同C,Basic等中進階語言一樣。如果需要實作更複雜的應用,利用外部程式是必要的,這包括系統本身提供的外部指令和第三方提供的工具或者軟體。
批處理檔案,或稱為批處理程式,是由一條條的DOS指令組成的普通文本檔案,可以用記事本直接編輯或用DOS指令建立,也可以用DOS下的文本編輯器Edit.exe來編輯。在“指令提示”下鍵入批處理檔案的名稱,或者輕按兩下該批處理檔案,系統就會調用Cmd.exe運作該批處理程式。一般情況下,每條指令占據一行;當然也可以将多條指令用特定符号(如:&、&&、|、||等)分隔後寫入同一行中;還有的情況就是像if、for等較進階的指令則要占據幾行甚至幾十幾百行的空間。
系統在解釋運作批處理程式時,首先掃描整個批處理程式,然後從第一行代碼開始向下逐句執行所有的指令,直至程式結尾或遇見exit指令或出錯意外退出。
批處理指令簡介
echo
rem
pause
call
start
goto
set
http://xstarcd.github.io/wiki/windows/windows_cmd_summary_commands.html
批處理符号簡介
回顯屏蔽 @
重定向1 >與>>
重定向2 <
管道符号 |
轉義符 ^
邏輯指令符包括:&、&&、||
http://xstarcd.github.io/wiki/windows/windows_cmd_summary_symbols.html
常用DOS指令
檔案夾管理
cd 顯示目前目錄名或改變目前目錄。
md 建立目錄。
rd 删除一個目錄。
dir 顯示目錄中的檔案和子目錄清單。
tree 以圖形顯示驅動器或路徑的檔案夾結構。
path 為可執行檔案顯示或設定一個搜尋路徑。
xcopy 複制檔案和目錄樹。
檔案管理
type 顯示文本檔案的内容。
copy 将一份或多份檔案複制到另一個位置。
del 删除一個或數個檔案。
move 移動檔案并重命名檔案和目錄。(Windows XP Home Edition中沒有)
ren 重命名檔案。
replace 替換檔案。
attrib 顯示或更改檔案屬性。
find 搜尋字元串。
fc 比較兩個檔案或兩個檔案集并顯示它們之間的不同
網絡指令
ping 進行網絡連接配接測試、名稱解析
ftp 檔案傳輸
net 網絡指令集及使用者管理
telnet 遠端登陸
ipconfig顯示、修改TCP/IP設定
msg 給使用者發送消息
arp 顯示、修改區域網路的IP位址-實體位址映射清單
系統管理
at 安排在特定日期和時間運作指令和程式
shutdown立即或定時關機或重新開機
tskill 結束程序
taskkill結束程序(比tskill進階,但WinXPHome版中無該指令)
tasklist顯示程序清單(Windows XP Home Edition中沒有)
sc 系統服務設定與控制
reg 系統資料庫控制台工具
powercfg控制系統上的電源設定
對于以上列出的所有指令,在cmd中輸入指令+/?即可檢視該指令的幫助資訊。如find /?
Windows Batch 常用指令
1 echo 和 @
回顯指令
@ #關閉單行回顯
echo off #從下一行開始關閉回顯
@echo off #從本行開始關閉回顯。一般批處理第一行都是這個
echo on #從下一行開始打開回顯
echo #顯示目前是 echo off 狀态還是 echo on 狀态
echo. #輸出一個”回車換行”,空白行
#(同echo, echo; echo+ echo[ echo] echo/ echo)
2 errorlevel
echo %errorlevel%
每個指令運作結束,可以用這個指令行格式檢視傳回碼
預設值為0,一般指令執行出錯會設 errorlevel 為1
3 dir
顯示檔案夾内容
dir #顯示目前目錄中的檔案和子目錄
dir /a #顯示目前目錄中的檔案和子目錄,包括隐藏檔案和系統檔案
dir c: /a:d #顯示 C 盤目前目錄中的目錄
dir c: /a:-d #顯示 C 盤根目錄中的檔案
dir c: /b/p #/b隻顯示檔案名,/p分頁顯示
dir *.exe /s #顯示目前目錄和子目錄裡所有的.exe檔案
4 cd
切換目錄
cd #進入根目錄
cd #顯示目前目錄
cd /d d:sdk #可以同時更改盤符和目錄
5 md
建立目錄
md d:abc #如果 d:a 不存在,将會自動建立中級目錄
如果指令擴充名被停用,則需要鍵入 mkdir abc。
6 rd
删除目錄
rd abc #删除目前目錄裡的 abc 子目錄,要求為空目錄
rd /s/q d:temp #删除 d:temp 檔案夾及其子檔案夾和檔案,/q安靜模式
7 del
删除檔案
del d:test.txt #删除指定檔案,不能是隐藏、系統、隻讀檔案
del /q/a/f d:temp*.*
删除 d:temp 檔案夾裡面的所有檔案,包括隐藏、隻讀、系統檔案,不包括子目錄
del /q/a/f/s d:temp*.*
删除 d:temp 及子檔案夾裡面的所有檔案,包括隐藏、隻讀、系統檔案,不包括子目錄
8 ren
重命名指令
ren d:temp tmp #支援對檔案夾的重命名
9 cls
清屏
10 type
顯示檔案内容
type c:boot.ini #顯示指定檔案的内容,程式檔案一般會顯示亂碼
type *.txt #顯示目前目錄裡所有.txt檔案的内容
11 copy
拷貝檔案
copy c:test.txt d:test.bak
複制 c:test.txt 檔案到 d: ,并重命名為 test.bak
copy con test.txt
從螢幕上等待輸入,按 Ctrl+Z 結束輸入,輸入内容存為test.txt檔案
con代表螢幕,prn代表列印機,nul代表空裝置
copy 1.txt + 2.txt 3.txt
合并 1.txt 和 2.txt 的内容,儲存為 3.txt 檔案
如果不指定 3.txt ,則儲存到 1.txt
copy test.txt +
複制檔案到自己,實際上是修改了檔案日期
12 title
設定cmd視窗的标題
title 新标題 #可以看到cmd視窗的标題欄變了
13 ver
顯示系統版本
14 label 和 vol
設定卷标
vol #顯示卷标
label #顯示卷标,同時提示輸入新卷标
label c:system #設定C槽的卷标為 system
15 pause
暫停指令
16 rem 和 ::
注釋指令
注釋行不執行操作
17 date 和 time
日期和時間
date #顯示目前日期,并提示輸入新日期,按”回車”略過輸入
date/t #隻顯示目前日期,不提示輸入新日期
time #顯示目前時間,并提示輸入新時間,按”回車”略過輸入
time/t #隻顯示目前時間,不提示輸入新時間
18 goto 和 :
跳轉指令
:label #行首為:表示該行是标簽行,标簽行不執行操作
goto label #跳轉到指定的标簽那一行
19 find (外部指令)
查找指令
find “abc” c:test.txt
在 c:test.txt 檔案裡查找含 abc 字元串的行
如果找不到,将設 errorlevel 傳回碼為1
find /i “abc” c:test.txt
查找含 abc 的行,忽略大小寫
find /c “abc” c:test.txt
顯示含 abc 的行的行數
20 more (外部指令)
逐屏顯示
more c:test.txt #逐屏顯示 c:test.txt 的檔案内容
21 tree
顯示目錄結構
tree d: #顯示D盤的檔案目錄結構
22 &
順序執行多條指令,而不管指令是否執行成功
23 &&
順序執行多條指令,當碰到執行出錯的指令後将不執行後面的指令
find “ok” c:test.txt && echo 成功
如果找到了”ok”字樣,就顯示”成功”,找不到就不顯示
24 ||
順序執行多條指令,當碰到執行正确的指令後将不執行後面的指令
find “ok” c:test.txt || echo 不成功
如果找不到”ok”字樣,就顯示”不成功”,找到了就不顯示
25 |
管道指令
dir . /s/a | find /c “.exe”
管道指令表示先執行 dir 指令,對其輸出的結果執行後面的 find 指令
該指令行結果:輸出目前檔案夾及所有子檔案夾裡的.exe檔案的個數
type c:test.txt|more
這個和 more c:test.txt 的效果是一樣的
26 > 和 >>
輸出重定向指令
清除檔案中原有的内容後再寫入追加内容到檔案末尾,而不會清除原有的内容
主要将本來顯示在螢幕上的内容輸出到指定檔案中
指定檔案如果不存在,則自動生成該檔案
type c:test.txt >prn
螢幕上不顯示檔案内容,轉向輸出到列印機
echo hello world>con
在螢幕上顯示hello world,實際上所有輸出都是預設 >con 的
copy c:test.txt f: >nul
拷貝檔案,并且不顯示”檔案複制成功”的提示資訊,但如果f盤不存在,還是會顯示出錯資訊
copy c:test.txt f: >nul 2>nul
不顯示”檔案複制成功”的提示資訊,并且f盤不存在的話,也不顯示錯誤提示資訊
echo ^^W ^> ^W>c:test.txt
生成的檔案内容為 ^W > W
^ 和 > 是控制指令,要把它們輸出到檔案,必須在前面加個 ^ 符号
27 <
從檔案中獲得輸入資訊,而不是從螢幕上
一般用于 date time label 等需要等待輸入的指令
@echo off
echo 2005-05-01>temp.txt
date