1. 程式人生 > >window批處理bat命令詳解

window批處理bat命令詳解

前言

批處理檔案(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

資料夾管理

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