天天看點

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
           

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