目錄 批處理 ,也稱為批處理 腳本,英文譯為batch,批處理 文件後綴bat就取的前三個字母。它的構成沒有固定格式,衹要遵守以下這條就ok了:每一行可視為一個命令,每個命令裏可以含多條子命令,從第一行開始執行,直到最後一行結束,它運行的平臺是dos。批處理 有一個很鮮明的特點:使用方便、靈活,自動化程度高,但功能較為薄弱。我不想讓自己寫的教程枯燥無味,因為牽纏到代碼(批處理 的內容算是代碼吧?)的問題本來就是枯燥的,很少有人能面對滿屏幕的代碼而靜下心來。所以我會用很多簡單實用的例子讓讀這篇教程的朋友去體會批處理 的那四射的魅力,感受它那古靈精怪的性格,不知不覺中愛上批處理 (暈,怎麽又是愛?到底批處理 和愛有什麽關係?答案:沒有!)。再說句“閑話”:要學好批處理 ,dos基礎一定要牢!當然腦子靈活也是很重要的一方面。
批處理 的功能完全取决於你使用的命令,而批處理 命令又分別內部命令和外部命令以及一些第三方工具。
最普遍使用的批處理 文件是autoexec.bat文件,無論什麽時候啓動或重啓動係統,dos都將自動執行它。此文件允許你做如下事情:輸入當前日期、設置命令路徑與係統提示符及裝載程序,而不需分別鍵入每個命令。autoexec.bat文件必須位於啓動dos盤的根目錄下。
所有批處理 以.bat或者.cmd作為擴展名,不過當你運行該文件時並不需要在命令行鍵入擴展名。要執行批處理 文件,衹需簡單地在係統提示符下鍵入其文件名即可,dos將按順序執行批處理 文件所包含的命令。
舉幾個例子,比如,當你新裝一臺電腦的時候需要用到dos命令,需要用鍵入命令的方式安裝係統;如果你能把所有的命令都串起來,讓它自動執行,那麽安裝工作就會變得很自動化。這種串起來的命令就是批處理 。像這樣,把許多命令集合到一個文件裏,完成自動化任務的可執行文件就是批處理 文件。批處理 文件一般以bat為擴展名,我們再舉個例子來說明批處理 文件的建立和在windows環境下的用途。比如,我們要在某文件夾下建立8個文件夾,它們的名字分別是mulu1、mulu2……mulu8等,我們可以用“記事本”在該文件夾下先建立一個文件make.bat(註意:擴展名要是bat,不能是txt),然後編輯這個文件,其內容是諸如:
md mulu1
md mulu2
……
md mulu8
等8行內容,編輯完成存盤後,衹要我們雙擊建立好的make.bat文件,8個文件夾就會自動為我們建立好。
簡明批處理 教程
ajumail 發表於 2005-03-11
最近對於批處理 技術的探討比較熱,也有不少好的批處理 程序發佈,但是如果沒有一定的相關知識恐怕不容易看
懂和理解這些批處理 文件,也就更談不上自己動手編寫了,古語雲:“授人以魚,不如授人以漁。”因為網上好像
並沒有一個比較完整的教材,所以抽一點時間寫了這片<<簡明批處理 教程>>給新手朋友們.也獻給所有為實現網絡
的自由與共享而努力的朋友們.
批處理 文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名為 .bat 或 .cmd。在命令提示下鍵入
批處理 文件的名稱,或者雙擊該批處理 文件,係統就會調用cmd.exe按照該文件中各個命令出現的順序來逐個運行
它們。使用批處理 文件(也被稱為批處理 程序或腳本),可以簡化日常或重複性任務。當然我們的這個版本的主
要內容是介紹批處理 在入侵中一些實際運用,例如我們後面要提到的用批處理 文件來給係統打補丁、批量植入後
門程序等。下面就開始我們批處理 學習之旅吧。
一.簡單批處理 內部命令簡介
1.echo 命令
打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。
語法
echo [{on|off}] [message]
sample:@echo off / echo hello world
在實際應用中我們會把這條命令和重定嚮符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命令到特定
格式的文件中.這將在以後的例子中體現出來。
2.@ 命令
表示不顯示@後面的命令,在入侵過程中(例如使用批處理 來格式化敵人的硬盤)自然不能讓對方看到你使用
的命令啦。
sample:@echo off
@echo now initializing the program,please wait a minite...
@format x: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個參數
給我們,效果和/y是一樣的。)
3.goto 命令
指定跳轉到標簽,找到標簽後,程序將處理從下一行開始的命令。
語法:goto label (label是參數,指定所要轉嚮的批處理 程序中的行。)
sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果這裏的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋。)
@rem check parameters if null show usage
:noparms
echo usage: monitor.bat serverip portnumber
goto end
標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto命令就是根
據這個:來尋找下一步跳到到那裏。最好有一些說明這樣你別人看起來纔會理解你的意圖啊。
4.rem 命令
註釋命令,在c語言中相當與/*--------*/,它並不會被執行,衹是起一個註釋的作用,便於別人閱讀和你自己日後修改。
rem message
sample:@rem here is the description.
5.pause 命令
運行 pause 命令時,將顯示下面的消息:
press any key to continue . . .
sample:
@echo off
:begin
copy a:*.* d:ack
echo please put a new disk into driver a
pause
goto begin
在這個例子中,驅動器 a 中磁盤上的所有文件均復製到d:ack中。顯示的註釋提示您將另一張磁盤放入驅動器 a 時,
pause 命令會使程序挂起,以便您更換磁盤,然後按任意鍵繼續處理。
6.call 命令
從一個批處理 程序調用另一個批處理 程序,並且不終止父批處理 程序。call 命令接受用作調用目標的標簽。如果在腳
本或批處理 文件外使用 call,它將不會在命令行起作用。
語法
call [:label [arguments]]
參數
[drive:}[path] filename
指定要調用的批處理 程序的位置和名稱。filename 參數必須具有 .bat 或 .cmd 擴展名。
7.start 命令
調用外部程序,所有的dos命令和命令行程序都可以由start命令來調用。
入侵常用參數:
min 開始時窗口最小化
separate 在分開的空間內開始 16 位 windows 程序
high 在 high 優先級類別開始應用程序
realtime 在 realtime 優先級類別開始應用程序
wait 啓動應用程序並等候它結束
parameters 這些為傳送到命令/程序的參數
執行的應用程序是 32-位 gui 應用程序時,cmd.exe 不等應用程序終止就返回命令提示。如果在命令腳本內執行,
該新行為則不會發生。
8.choice 命令
choice 使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。使用時應該加/c:參數,c:後應寫提示可輸入
的字符,之間無空格。它的返回碼為1234……
如: choice /c:dme defrag,mem,end
將顯示
defrag,mem,end[d,m,e]?
sample:
sample.bat的內容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (應先判斷數值最高的錯誤碼)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:dosdefrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件運行後,將顯示 defrag,mem,end[d,m,e]? 用戶可選擇d m e ,然後if語句將作出判斷,d表示執行標號為
defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後都以goto end將
程序跳到end標號處,然後程序將顯示good bye,文件結束。
9.if 命令
if 表示將判斷是否符合規定的條件,從而决定執行不同的命令。 有三種格式:
1、if "參數" == "字符串" 待執行的命令
參數如果等於指定的字符串,則條件成立,運行命令,否則運行下一句。(註意是兩個等號)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2、if exist 文件名 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句。
如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 數字 待執行的命令
如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。
如if errorlevel 2 goto x2
dos程序運行時都會返回一個數字給dos,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。
10.for 命令
for 命令是一個比較復雜的命令,主要用於參數在指定的範圍內循環執行命令。
在批處理 文件中使用 for 命令時,指定變量請使用 %%variable
for {%variable|%%variable} in (set) do command [ commandlineoptions]
%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters 為特定命令指定參數或命令行開關。
在批處理 文件中使用 for 命令時,指定變量請使用 %%variable
而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同於 %i
如果命令擴展名被啓用,下列額外的 for 命令格式會受到
支持:
for /d %variable in (set) do command [command-parameters]
如果集中包含通配符,則指定與目錄名匹配,而不與文件
名匹配。
for /r [[drive:]path] %variable in (set) do command [command-
檢查以 [drive:]path 為根的目錄樹,指嚮每個目錄中的
for 語句。如果在 /r 後沒有指定目錄,則使用當前
目錄。如果集僅為一個單點(.)字符,則枚舉該目錄樹。
for /l %variable in (start,step,end) do command [command-para
該集表示以增量形式從開始到結束的一個數字序列。
因此,(1,1,5) 將産生序列 1 2 3 4 5,(5,-1,1) 將産生
序列 (5 4 3 2 1)。
for /f ["options"] %variable in (file-set) do command
for /f ["options"] %variable in ("string") do command
for /f ["options"] %variable in (command) do command
或者,如果有 usebackq 選項:
for /f ["options"] %variable in (file-set) do command
for /f ["options"] %variable in ("string") do command
for /f ["options"] %variable in (command) do command
filenameset 為一個或多個文件名。繼續到 filenameset 中的
下一個文件之前,每份文件都已被打開、讀取並經過處理。
處理包括讀取文件,將其分成一行行的文字,然後將每行
解析成零或更多的符號。然後用已找到的符號字符串變量值
調用 for 循環。以默認方式,/f 通過每個文件的每一行中分開
的第一個空白符號。跳過空白行。您可通過指定可選 "options"
參數替代默認解析操作。這個帶引號的字符串包括一個或多個
指定不同解析選項的關鍵字。這些關鍵字為:
eol=c - 指一個行註釋字符的結尾(就一個)
skip=n - 指在文件開始時忽略的行數。
delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的
默認分隔符集。
tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代
的 for 本身。這會導致額外變量名稱的
格式為一個範圍。通過 nth 符號指定 m
符號字符串中的最後一個字符星號,
那麽額外的變量將在最後一個符號解析之
分配並接受行的保留文本。
usebackq - 指定新語法已在下類情況中使用:
在作為命令執行一個後引號的字符串並且
引號字符為文字字符串命令並允許在 fi
中使用雙引號擴起文件名稱。
sample1:
for /f "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
會分析 myfile.txt 中的每一行,忽略以分號打頭的那些行,將
每行中的第二個和第三個符號傳遞給 for 程序體;用逗號和/或
空格定界符號。請註意,這個 for 程序體的語句引用 %i 來
取得第二個符號,引用 %j 來取得第三個符號,引用 %k
來取得第三個符號後的所有剩餘符號。對於帶有空格的文件
名,您需要用雙引號將文件名括起來。為了用這種方式來使
用雙引號,您還需要使用 usebackq 選項,否則,雙引號會
被理解成是用作定義某個要分析的字符串的。
%i 專門在 for 語句中得到說明,%j 和 %k 是通過
tokens= 選項專門得到說明的。您可以通過 tokens= 一行
指定最多 26 個符號,衹要不試圖說明一個高於字母 z 或
z 的變量。請記住,for 變量是單一字母、分大小寫和全局的;
同時不能有 52 個以上都在使用中。
您還可以在相鄰字符串上使用 for /f 分析邏輯;方法是,
用單引號將括號之間的 filenameset 括起來。這樣,該字符
串會被當作一個文件中的一個單一輸入行。
最後,您可以用 for /f 命令來分析命令的
有一點必須指出:第8條的choice命令在新版windows下已經沒有了,可以使用 set /p 命令替代,然後根據輸入做判斷操作.
批處理 :用來成批的處理文件、圖像等。
批處理 文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名為 .bat 或 .cmd。在命令提示下鍵入批處理 文件的名稱,或者雙擊該批處理 文件,係統就會調用cmd.exe按照該文件中各個命令出現的順序來逐個運行它們。使用批處理 文件(也被稱為批處理 程序或腳本),可以簡化日常或重複性任務。當然我們的這個版本的主要內容是介紹批處理 在入侵中一些實際運用,例如我們後面要提到的用批處理 文件來給係統打補丁、批量植入後門程序等。下面就開始我們批處理 學習之旅吧。
一.簡單批處理 內部命令簡介
1.echo 命令
打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。
語法
echo [{on off}] [message]
sample:@echo off / echo hello world
在實際應用中我們會把這條命令和重定嚮符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命令到特定格式的文件中.這將在以後的例子中體現出來。
2.@ 命令
表示不顯示@後面的命令,在入侵過程中(例如使用批處理 來格式化敵人的硬盤)自然不能讓對方看到你使用的命令啦。
sample:@echo off
@echo now initializing the program,please wait a minite...
@format x: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個參數給我們,效果和/y是一樣的。)
3.goto 命令
指定跳轉到標簽,找到標簽後,程序將處理從下一行開始的命令。
語法:goto label (label是參數,指定所要轉嚮的批處理 程序中的行。)
sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果這裏的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋。)
@rem check parameters if null show usage
:noparms
echo usage: monitor.bat serverip portnumber
goto end
標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto命令就是根據這個:來尋找下一步跳到到那裏。最好有一些說明這樣你別人看起來纔會理解你的意圖啊。
4.rem 命令
註釋命令,在c語言中相當與/*--------*/,它並不會被執行,衹是起一個註釋的作用,便於別人閱讀和你自己日後修改。
rem message
sample:@rem here is the description.
5.pause 命令
運行 pause 命令時,將顯示下面的消息:
press any key to continue . . .
sample:
@echo off
:begin
copy a:*.* d:ack
echo please put a new disk into driver a
pause
goto begin
在這個例子中,驅動器 a 中磁盤上的所有文件均復製到d:ack中。顯示的註釋提示您將另一張磁盤放入驅動器 a 時,pause 命令會使程序挂起,以便您更換磁盤,然後按任意鍵繼續處理。 批處理 文件圖標 批處理 (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 命令 】
打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。
語法
echo [{on|off}] [message]
Sample:@echo off / echo hello world
在實際應用中我們會把這條命令和重定嚮符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一
些命令到特定的文件中。
【 rem 命令 】
註釋命令,類似於在C語言中的/*--------*/,它並不會被執行,衹是起一個註釋的作用,便於別人閱讀
和你自己日後修改。
:: 也具有rem的功能
Rem Message
Sample:@Rem Here is the description.
【 pause 命令 】
暫停命令。運行 Pause 命令時,將顯示下面的消息:
Press any key to continue. . .(或:請按任意鍵繼續. . .)
Sample:
@echo off
:begin
copy G:*.* d:back
echo 請插入另一張光盤...
pause
goto begin
在這個例子中,驅動器 G 中磁盤上的所有文件均復製到d:back中。顯示的註釋提示您將另一張光盤
盤放入驅動器 G 時,pause 命令會使程序挂起,以便您更換光盤,然後按任意鍵繼續處理。
【 call 命令 】
從一個批處理 程序調用另一個批處理 程序,並且不終止父批處理 程序。call 命令接受用作調用目標的
標簽。如果在腳本或批處理 文件外使用 Call,它將不會在命令行起作用。
語法
call [[Drive:][Path] FileName ] [:label [arguments]]
參數
[Drive:}[Path] FileName
指定要調用的批處理 程序的位置和名稱。
【 start 命令 】
調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。
如:start calc.exe 即可打開Windows的計算器。
常用參數:
MIN 開始時窗口最小化
SEPARATE 在分開的空間內開始 16 位 Windows 程序
HIGH 在 HIGH 優先級類別開始應用程序
REALTIME 在 REALTIME 優先級類別開始應用程序
WAIT 啓動應用程序並等候它結束
parameters 這些為傳送到命令/程序的參數
執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。如果在命令
腳本內執行,該新行為則不會發生。
【 goto 命令 】
跳轉命令。程序指針跳轉到指定的標簽,從標簽後的第一條命令開始繼續執行批處理 程序。
語法:goto label (label是參數,指定所要轉嚮的批處理 程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果這裏的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋
。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto
命令就是根據這個:來尋找下一步跳到到那裏。最好有一些說明這樣你別人看起來纔會理解你的意圖啊。
【 set 命令 】
顯示、設置或刪除變量。
顯示變量:set 或 set s 前者顯示批處理 當前已定義的所有變量及其值,後者顯示所有以s開頭的變量及值。
設置變量:set aa=abcd 此句命令便可嚮變量aa賦值abcd。如果變量aa已被定義,則aa的值被修改為abcd;若aa尚未定義,則此句命令即可定義新的變量aa,同時為變量aa賦予初始值abcd。
刪除變量:set aa= 此句命令即可刪除變量aa。若變量aa已被定義,則刪除變量aa;若aa尚未定義,則此句命令為實質意義。
需要說明的是,批處理 中的變量是不區分類型的,不需要像C語言中的變量那樣還要區分int、float、char等。比如執行set aa=345後,變量aa的值既可以被視為數字345,也可以被視為字符串345。
set命令具有擴展功能,如用作交互輸入、字符串處理、數值計算等,屬於高級命令範疇。 【 回顯屏蔽 @ 】
表示不顯示@後面的命令,在入侵過程中(例如使用批處理 來格式化敵人的硬盤)自然不能讓對方看到你使用的命令啦。
@用法舉例:通過運行批處理 文件對比pause和@pause命令即可明了@的效果。
【 重定嚮1 >與>> 】
將輸出信息重定嚮到指定的設備或文件。係統默認輸出到顯示器。
如:echo aaaaa>a.txt 即可將本在顯示器上顯示的信息aaaaa輸出到文件a.txt中,屏幕上沒有任何顯示。如果文件a.txt本來已經存在,該命令將首先擦除a.txt中的所有信息,然後寫入信息aaaaa;若a.txt本來就不存在,該命令即可新建一個a.txt文件,並寫入信息aaaaa。
echo aaaaa>>a.txt 類似於echo aaaaa>a.txt。區別在於:如果a.txt本已存在,>a.txt會擦除a.txt中的原有內容,而>>a.txt並不擦除原有內容,僅在a.txt文件的末尾添加信息aaaaa。a.txt不存在時,二者沒有差別。
【 重定嚮2 < 】
將輸入信息來源重定嚮為指定的設備或文件。係統默認從顯示器讀取輸入信息。
重定嚮使用舉例:
=========================================
@echo off
echo abcdefg——這是文件a.txt中的信息>a.txt
echo 請任意輸入字符,以回車結束:
set /p ifo=
cls
echo 【 從屏幕獲得的輸入信息 】
echo %ifo%
set /p ifo=<a.txt
echo 【 從文件a.txt獲得的輸入信息 】
echo %ifo%
pause>nul
=========================================
讀者觀察命令與輸出即可體會到重定嚮的功能和效果。
【 管道符號 | 】
將管道符號前面命令的輸出結果重定嚮輸出到管道符號後面的命令中去,作為後面命令的輸入。使用格式為:command_1|command_2
管道符號使用舉例:
=========================================
@echo off
echo aaaa>a.txt
del /p a.txt
pause
=========================================
@echo off
echo aaaa>a.txt
echo y|del /p a.txt
pause
=========================================
對比以上兩個批處理 執行結果,讀者即可明白管道符的用法和效果。
需要說明的是,上面del命令添加開關/p衹是為了讓讀者明白管道符號的使用方法,實際刪除文件時不加/p開關即可實現無提示直接刪除。
【 轉義符 ^ 】
將特殊符號轉化為一般符號,即剝離特殊符號的特殊地位。特殊符號指:| & > <
比如,如果我們想輸出符號“>”,直接用命令 echo > 是不行的,必須修改為 echo ^> 。其餘幾個特殊符號類似需要有同樣的處理。
轉義字符使用舉例:
=========================================
@echo off
echo aaaa>a.txt
echo 第一句echo執行完畢
echo aaaa^>a.txt
echo 第二句echo執行完畢
pause
=========================================
比較上面的兩句echo,第一句echo將信息aaaa輸出到了文件a.txt,而第二句echo則在直接屏幕上顯示除aaaa>a.txt
【 邏輯命令符 】
邏輯命令符包括:&、&&、||
&-它的作用是用來連接n個DOS命令,並把這些命令按順序執行,而不管是否有命令執行失敗;
&&-當&&前面的命令成功執行時,執行&&後面的命令,否則不執行;
||-當||前面的命令失敗時,執行||後面的命令,否則不執行。
=========================================
@echo off
echo ^|^|
reg add HKCU /v try /f||echo **成功**
reg add HKCU1 /v try /f||echo **失敗**
echo ^&^&
reg delete HKCU /v try /f&&echo **成功**
reg delete HKCU /v try /f&&echo **失敗**
echo ^&
reg delete HKCU /v try /f&echo **成功**
reg delete HKCU /v try /f&echo **失敗**
pause
=========================================
執行reg add或reg delete後,係統會給出執行結果;我們通過echo命令也給出了“執行結果”。對比係統和我們自己給出的結果,既可以驗證邏輯命令的判斷機理。 【 文件夾管理 】
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 /? 類似於C語言,批處理 也有它的語句結構。批處理 的語句結構主要有選擇結構(if語句)、循環結構(for語句)等。
【 if語句(選擇結構) 】
if語句實現條件判斷,包括字符串比較、存在判斷、定義判斷等。通過條件判斷,if語句即可以實現選擇功能。
1、字符串比較
if語句僅能夠對兩個字符(串)是否相同、先後順序進行判斷等。其命令格式為:
IF [not] string1 compare-op string2 command1 [else command2]
其中,比較操作符compare-op有以下幾類:
== - 等於
EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於
選擇開關/i則不區分字符串大小寫;選擇not項,則對判斷結果進行邏輯非。
字符串比較示例:
===============================================
@echo off
set str1=abcd1233
set str2=ABCD1234
if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)
if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)
echo.
set /p choice=是否顯示當前時間?(y/n)
if /i not %choice% EQU n echo 當前時間是:%date% %time%
pause>nul
===============================================
對於最後一個if判斷,當我們輸入n或N時的效果是一樣的,都不會顯示時間。如果我們取消開關/i,則輸入N時,依舊會顯示時間。
另外請註意一下幾個細節:1-echo str1^<str2和echo str1^>=str2;2-echo.。
2、存在判斷
存在判斷的功能是判斷文件或文件夾是否存在。其命令格式為:
IF [NOT] EXIST filename command1 [else command2]
===============================================
@echo off
if exist %0 echo 文件%0是存在的!
if not exist %~df0 (
echo 文件夾%~df0不存在!
) else echo 文件夾%~df0存在!
pause>nul
===============================================
這裏註意幾個地方:
1-存在判斷既可以判斷文件也可以判斷文件夾;
2-%0即代表該批處理 的全稱(包括驅動器盤符、路徑、文件名和擴展類型);
3-%~df0是對%0的修正,衹保留了其驅動器盤符和路徑,詳情請參考for /?,屬高級批處理 範疇;
4-註意if語句的多行書寫,多行書寫要求command1的左括號必須和if在同一行、else必須和command1的右括號同行、command2的左括號必須與else同行、command1和command2都可以有任意多行,即command可以是命令集。
3、定義判斷
定義判斷的功能是判斷變量是否存在,即是否已被定義。其命令格式為:
IF [not] DEFINED variable command1 [else command2]
存在判斷舉例:
===============================================
@echo off
set var=111
if defined var (echo var=%var%) else echo var尚未定義!
set var=
if defined var (echo var=%var%) else echo var尚未定義!
pause>nul
===============================================
對比可知,"set var="可以取消變量,收回變量所占據的內存空間。
4、結果判斷
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
先對源代碼進行匯編,如果失敗則暫停顯示錯誤信息,並在按任意鍵後自動進入編輯界面;否則用link程序連接生成的obj文件,這種用法是先判斷前一個命令執行後的返回碼(也叫錯誤碼,DOS程序在運行完後都有返回碼),如果和定義的錯誤碼符合(這裏定義的錯誤碼為1),則執行相應的操作(這裏相應的操作為pause & edit %1.asm部分)。
另外,和其他兩種用法一樣,這種用法也可以表示否定。用否定的形式仍表達上面三句的意思,代碼變為:
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
【 for語句(循環結構) 】
for語句可以實現類似於C語言裏面的循環結構,當然for語句的功能要更強大一點,通過不同的開關可以實現更多的功能。for語句有多個開關,不同開關將會實現不同的功能。
1、無開關
無開關的for語句能夠對設定的範圍內進行循環,是最基本的for循環語句。其命令格式為:
FOR %%variable IN (set) DO command
其中,%%variable是批處理 程序裏面的書寫格式,在DOS中書寫為%variable,即衹有一個百分號(%);set就是需要我們設定的循環範圍,類似於C語言裏面的循環變量;do後面的command就是循環所執行的命令,即循環體。
無開關for語句舉例:
===============================================
@echo off
for %%i in (a,"b c",d) do echo %%i
pause>nul
===============================================
2、開關/L
含開關/L的for語句,可以根據set裏面的設置進行循環,從而實現對循環次數的直接控製。其命令格式為:
FOR /L %%variable IN (start,step,end) DO command
其中,start為開始計數的初始值,step為每次遞增的值,end為結束值。當end小於start時,step需要設置為負數。
含開關/L的for語句舉例(創建5個文件夾):
===============================================
@echo off
for /l %%i in (1,2,10) do md %%i
pause
===============================================
上例將新建5個文件夾,文件夾名稱依次為1、3、5、7、9。可以發現,%%i的結束值並非end的值10,而是不大於end的一個數。
3、開關/F
含開關/F的for語句具有最強大的功能,它能夠對字符串進行操作,也能夠對命令的返回值進行操作,還可以訪問硬盤上的ASCII碼文件,比如txt文檔等。其命令格式為:
FOR /F ["options"] %%variable IN (set) DO command
其中,set為("string"、'command'、file-set)中的一個;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個或多個的組合。各選項的意義參見for /f。一般情況下,使用較多的是skip、tokens、delims三個選項。
含開關/F的for語句舉例:
===============================================
@echo off
echo **No Options:
for /f %%a in ("1,2,10") do echo a=%%a
echo **Options tokens ^& delims:
for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c
pause
===============================================
@echo off
echo 本文件夾裏面的文件有:
for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (
if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b
)
pause
===============================================
@echo off
echo 本文件夾裏面的文件有:
dir>c:file.txt
for /f "skip=5 tokens=3* delims= " %%a in (c:file.txt) do (
if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b
)
del c:file.txt
pause
===============================================
對於後面的兩個例子,其中options裏面的delims= 是可以刪除的,因為衹要添加了/F開關係統就將delims的值默認為空格。
符號字符串中的最後一個字符星號,
那麽額外的變量將在最後一個符號解析之後
分配並接受行的保留文本。本例中也可以改為4,不過文件名中有空格的文件,衹能顯示空格以前部分
同時我們也看到了,for語句的do後面的command也是可以分行的,衹需要保證command的左括號和do在同一行就可以了。
4、開關/D或/R
含開關/D或/R的for語句是與目錄或文件有關的命令,一般情況下很少使用。含開關/R的命令有時候被用於通過遍歷文件夾來查找某一個文件或文件夾,故而列舉此例。
含開關/R的for語句舉例(文件夾遍歷):
===============================================
@echo off
setlocal enabledelayedexpansion
FOR /R d: %%i IN (.) DO (
set dd=%%i
set "dd=!dd:~0,-1!"
echo !dd!
)
pause
exit
===============================================
上例即可以羅列出D盤下的所有文件夾,其速度要比命令"tree d:"慢多了,不過其返回結果的實用性則遠遠超過了tree命令。
一般情況下我們不推薦通過遍歷文件夾來查找文件,特別是在查找某些程序(比如QQ.exe)的位置時。推薦通過reg命令查找註册表來查找QQ的路徑,以保證查找效率。
上例中也出現了幾個新面孔,如setlocal、感嘆號等。其中,感嘆號其實就是變量百分號(%)的強化版。之所以要用!而不用%,是因為在for循環中,當一個變量被多次賦值時,%dd%所獲取的僅僅是dd第一次被賦予的值;要想刷新dd的值,就必須首先通過命令"setlocal enabledelayedexpansion"來開啓延遲變量開關,然後用!dd!來獲取dd的值。
for語句是批處理 裏面功能最強大、使用最普遍卻又最難掌握的一套命令,這也是批處理 菜鳥和批處理 高手最明顯的一個分水嶺,一旦掌握了這套命令,那麽你就離批處理 達人不遠了! 批處理 有着具有非常強大的字符串處理能力,其功能絶不低於C語言裏面的字符串函數集。批處理 中可實現的字符串處理功能有:截取字符串內容、替換字符串特定字段、合併字符串、擴充字符串等功能。下面對這些功能一一進行講解。
【 1、截取字符串 】
截取字符串可以說是字符串處理功能中最常用的一個子功能了,能夠實現截取字符串中的特定位置的一個或多個字符。舉例說明其基本功能:
=========================================
@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo 原字符串(第二行為各字符的序號):
echo %ifo%
echo 123456789012345678901234567890123456
echo 截取前5個字符:
echo %ifo:~0,5%
echo 截取最後5個字符:
echo %ifo:~-5%
echo 截取第一個到倒數第6個字符:
echo %ifo:~0,-5%
echo 從第4個字符開始,截取5個字符:
echo %ifo:~3,5%
echo 從倒數第14個字符開始,截取5個字符:
echo %ifo:~-14,5%
pause
=========================================
當然,上面的例子衹是將字符串處理的基本功能展示出來了,還看不出字符串處理具體有什麽用處。下面這個例子是對時間進行處理。
=========================================
@echo off
echo 當前時間是:%time% 即 %time:~0,2%點%time:~3,2%分%time:~6,2%秒%time:~9,2%釐秒
pause
=========================================
【 2、替換字符串 】
替換字符串,即將某一字符串中的特定字符或字符串替換為給定的字符串。舉例說明其功能:
=========================================
@echo off
set aa=偉大的中國!我為你自豪!
echo 替換前:%aa%
echo 替換後:%aa:中國=中華人民共和國%
echo aa = %aa%
set "aa=%aa:中國=中華人民共和國%"
echo aa = %aa%
pause
=========================================
對於上面的例子有一點說明,對比兩個echo aa = %aa%可以發現,如果要修改變量aa的內容的話,就需要將修改結果“%aa:中國=中華人民共和國%”賦值給變量aa。上面的字符串截取也有着同樣的特點。
【 3、字符串合併 】
其實,合併字符串就是將兩個字符串放在一起就可以了。舉例說明:
=========================================
@echo off
set aa=偉大的中國!
set bb=我為你自豪!
echo %aa%%bb%
echo aa=%aa%
echo bb=%bb%
set "aa=%aa%%bb%"
echo aa=%aa%
pause
=========================================
同樣,如果要改變變量aa的內容的話,就需要將合併結果“%aa%%bb%”賦值給變量aa。
【 4、擴充字符串 】
“擴充”這個詞彙來自於微軟自己的翻譯,意思就是對表示文件路徑的字符串進行特殊的處理,具體功能羅列如下:
=========================================
~I - 刪除任何引號("),擴充 %I
%~fI - 將 %I 擴充到一個完全合格的路徑名
%~dI - 僅將 %I 擴充到一個驅動器號
%~pI - 僅將 %I 擴充到一個路徑
%~nI - 僅將 %I 擴充到一個文件名
%~xI - 僅將 %I 擴充到一個文件擴展名
%~sI - 擴充的路徑衹含有短名
%~aI - 將 %I 擴充到文件的文件屬性
%~tI - 將 %I 擴充到文件的日期/時間
%~zI - 將 %I 擴充到文件的大小
%~$PATH:I - 查找列在路徑環境變量的目錄,並將 %I 擴充
到找到的第一個完全合格的名稱。如果環境變量名
未被定義,或者沒有找到文件,此組合鍵會擴充到
空字符串
可以組合修飾符來得到多重結果:
%~dpI - 僅將 %I 擴充到一個驅動器號和路徑
%~nxI - 僅將 %I 擴充到一個文件名和擴展名
%~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
%~dp$PATH:i - 查找列在路徑環境變量的目錄,並將 %I 擴充
到找到的第一個驅動器號和路徑。
%~ftzaI - 將 %I 擴充到類似輸出綫路的 DIR
=========================================
以上內容引用於for /?幫助信息。其中的I代表變量I,不過需要說明的是,不是所有的變量都能夠進行擴充的,有兩個條件:1、該字符串代表一個文件路徑;2、變量要用%x來表示,x可取a-z A-Z 0-9共62個字符中的任意一個。舉例說明:
=========================================
@echo off
echo 正在運行的這個批處理 :
echo 完全路徑:%0
echo 去掉引號:%~0
echo 所在分區:%~d0
echo 所處路徑:%~p0
echo 文件名:%~n0
echo 擴展名:%~x0
echo 文件屬性:%~a0
echo 修改時間:%~t0
echo 文件大小:%~z0
pause
=========================================
其中的%0是批處理 裏面的參數,代表當前運行的批處理 的完全路徑。類似的還有%1-%9,分別代表傳遞來的第1-9個參數。例子如下:
===============================================
@echo off
set aa=C:WindowsPPPa.btx
call :deal aaa %aa% "c c" ddd eee
pause>nul
exit
:deal
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
===============================================
其中,變量aa在之前是不可以擴充的,通過call命令並將aa作為參數傳遞給子函數:deal,將aa變量轉換成了變量%1,即符合%x格式,從而可以進行字符串擴充。
至於%x中x取a-z A-Z的形式,可以復習一下for語句,for語句裏面的變量就是用%x來表示的,因而可以直接進行擴充。 批處理 裏面的數值計算功能較弱,衹能夠進行整型計算,忽略浮點數的小數部分;同時數值計算的範圍也受限於係統位數,對於目前較為常見的32位機來說,數值計算能處理的數值範圍為0x80000000h~0x7FFFFFFFh,即-2147483648~+2147483647。
數值計算需要使用set命令,具體格式為“set /a expression”。其中,expression代表計算表達式,計算表達式跟C語言裏面的表達式基本上完全一致。set支持的運算符也跟C語言裏面的一樣,衹是沒有了増一減一。set支持的運算符及優先級排序如下:
=========================================
() - 分組
! ~ - - 一元運算符(邏輯非、按位非、取負)
* / % - 算數運算符(乘、除得商、除得餘數,即取餘)
+ - - 算數運算符(加、減)
<< >> - 邏輯移位(左移一位、右移一位)
& - 按位“與”
^ - 按位“異”
| - 按位“或”
= *= /= %= += -= - 賦值
&= ^= |= <<= >>=
, - 表達式分隔符(set可一次處理多個表達式)
=========================================
我們知道,批處理 中取變量的值是需要用%或者!的,而在set /a 中,直接用變量名稱即可取得變量的值。另外,set支持八進製(數字前綴0)、十進製(數字無前綴)和十六進製(數字前綴0x),且支持不同進製之間的計算,如set /a a=123+0123+0x123,計算及顯示結果為十進製。 本節學習有關批處理 的一些比較瑣碎、但又比較有價值的一些知識,運用這些知識後,纔有條件更好的實現的批處理 的功能,並能使批處理 擺脫黑白世界而顯得更加多姿多彩。廢話少說,開講啦~
【(一)環境變量 】
所謂“環境變量”,實際上就是C語言裏面的“變量”的意思。批處理 的變量可以分為兩類,由係統定義的係統變量和由用戶根據需要自定義的用戶變量。
【 1、係統變量 】
批處理 的一些變量是由操作係統事先定義好的,可以適用於任何批處理 ,我們稱這些特殊的變量為“係統變量”。係統變量有很多個,包括硬件類、操作係統類、文件路徑類、係統時間類等。要查看所有的係統變量,請新打開一個cmd窗口,輸入set回車即可。對幾個比較常用的變量解釋如下:
ComputerName 計算機名,即右鍵 我的電腦--屬性--計算機名 選項卡中的“完整的計算機名稱”
ComSpec cmd.exe完整路徑名
HomeDrive 係統分區盤符,一般都是C盤,故而HomeDrive=C:
Path 可執行文件默認搜索路徑。這個東東非常重要!待會兒單獨講解…
ProgramFiles 就是係統的Program Files的路徑啦,一般都是C:Program Files,這就是安裝軟件時默認的安裝路徑了
Prompt 個性化設置cmd提示符的必備武器!不過,我沒怎麽用過~
SystemDrive 包含係統根目錄的分區,其實就是HomeDrive
SystemRoot 係統根目錄路徑,一般都是C:WINDOWS
Temp、Tmp 文件、程序等可使用的臨時目錄,默認是C:WINDOWSTemp或Tmp。幾乎所有的程序在運行時都會在這個目錄裏面“臨時”寫入文件。一般情況下,程序寫入的臨時文件都應該被該程序刪除,可惜的是,大部分的程序都很健忘,導致這個文件夾占據的空間越來越大,自然也就使我們的係統增肥嘍。所以,我們要把它修改到其他分區,並且時時的清理裏面的臨時文件。
UserName 當前用戶名,即所登陸的賬戶名
UserProfile 當前用戶的配置目錄,一般都是C:Documents and Settings%UserName%。默認情況下,我們的桌面就是這個目錄下面的“桌面”文件夾;我的文檔就是這個目錄下面的“My Documents”文件夾。所以啦,往桌面上或我的文檔裏面放東西就是放到這個文件夾下面了,也就是放到C盤了,重裝係統時要覆蓋C盤內容的,所以桌面上或我的文檔裏面的東西當然就會Gone with the Wind~解决方法有兩個,一是保持良好的習慣,不把重要文件放到這兩個地方;二是,修改默認設置,將這兩個文件夾都移到其他分區。
WinDir 操作係統路徑,其實就是SystemRoot
【 2、用戶變量 】
編寫批處理 程序時,用戶根據需要自己定義的變量稱之為用戶變量。用戶變量類似於C語言裏面的變量,僅僅在定義該變量的程序中有效。
用戶變量由set命令定義,這是批處理 中非常非常重要的一個操作,從而使set命令成為批處理 裏面使用頻率最高的幾個命令之一。關於set命令的使用,參考set /?,本教程也會在後面對其進行講解。
【 3、變量引用 】
前面的幾節課裏面,我們已經看到了如何引用變量,即直接用變量名操作變量,通過"%"或"!"來獲取變量的值。其中,衹有在for語句裏面重複對同一變量多次賦值時纔需要使用"!",並且在使用"!"調用變量時,要首先“啓用延遲環境變量擴充”,啓動命令為:SetLocal EnableDelayedExpansion。另外需要說明的是,“啓用延遲環境變量擴充”後,所有的"!"都將被視為“取變量值”的特殊符號,即使用"^!"也不能輸出符號"!"。若要輸出"!",則需要“停用延遲環境變量擴充”,命令為:SetLocal DisableDelayedExpansion
【(二)參數 】
跟C語言類似,在調用函數或其他批處理 時可能需要傳遞參數。批處理 的參數傳遞分為直接和間接兩種傳遞參數的方法。
【 1、直接傳遞 】
直接傳遞參數,即在使用call命令時,不使用任何參數,在子函數或子批處理 裏面直接對主函數(也稱父批處理 )裏面的變量進行修改。這跟匯編語言裏面的參數傳遞方式類似。
直接傳遞參數舉例:
===============================================
@echo off
setlocal enabledelayedexpansion
set var=aCdehiM,?mnrstW y
echo %var%
call :deal
setlocal disabledelayedexpansion
set var=%var:?=!%
echo %var%
pause>nul
exit
:deal
set tm=!var!
set var=
for %%i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (
set var=!var!!tm:~%%i,1!
)
goto :eof
===============================================
可以發現,當我們把變量var作為參數賦予子函數:deal後,子函數對var的值進行了修改;當子函數返回後,主函數裏面的var的值就已經是子函數裏面var被修改後的值了。
該例子中,使用了本節課前面講到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保證了var在for循環裏面能夠根據我們的意願進行處理,後者保證了能夠正確輸出符號"!"。另外例子中還使用了命令set,利用set對字符串進行了處理。還有一個地方使用了語句goto :eof,該語句相當於C語言裏面的return或匯編語言裏面的RET,即子程序返回命令。需要說明的是,當子函數本身就在批處理 文件的末尾的話,我們是可以省略這句話的,比如將此例的goto :eof刪除是不會産生任何影響的。
【 2、間接傳遞 】
間接傳遞參數,即在使用call命令時,在其後面添加參數,形如call {[:label][ChildBatch]} Parameter1 Parameter2 ... ParameterN。這跟C語言裏面傳遞參數的格式類似。不同於C語言,批處理 中的子函數不需要定義形參,更不需要指定參數的個數。傳遞過來的參數,在子函數或子批處理 裏面是以%1~%9的形式表示的,即%1~%9分別表示傳遞過來的第1~9個參數。
===============================================
@echo off
call :deal aaa bbb "c c" ddd eee
pause>nul
exit
:deal
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
===============================================
通過這個例子就可以清晰的看到%n參數表示法的用法。參數列表中包含空格的依舊要用雙引號(")引起來;另外,也可以看到,%0已經變成了子函數的標號了,而不是父批處理 的文件名全稱。
【 3、區別 】
這兩種參數傳遞方法本質上是沒有區別的,形式上,直接傳遞直接對原變量進行操作,丟失了原變量的值;間接傳遞則通過%n對原變量進行了簡單的備份,並且通用性更強,即不限定原變量的名稱。另外,使用%n還有一個非常大的好處,就是可以通過%~*i來加強處理變量的能力。關於%~*i,詳細內容參見for /?。
針對二者的差別,可以根據情況决定使用哪種傳遞方式:
--1、作為參數的變量名固定、且在子函數中不需要對其進行備份的情況下,使用直接傳遞法;
--2、若將子函數作為一個通用的程序模塊,以適應於對不同變量的處理,或者作為參數的變量不需要備份時,使用間接傳遞法。
具體使用哪種方法,還需根據實際情況或使用習慣進行選擇。
【(三)返回值 】
有些命令在執行之後將會返回一定的錯誤值(errorlevel),可以通過errorlevel的值判斷命令執行的狀況。這點類似於C語言裏面的exit(num),num就是錯誤代碼。
獲取返回值errorlevel的方法就是,在執行命令後,立馬調用返回值errorlevel,如echo %errorlevel%或者if %errorlevel%==1等命令。
errorlevel舉例:
===============================================
@echo off
reg add HKCU /v try /f>nul
reg delete HKCU /v try /f
if errorlevel 0 (echo 刪除成功!) else (echo 刪除失敗!)
reg delete HKCU /v try /f
if %errorlevel%==0 (echo 刪除成功!) else (echo 刪除失敗!)
pause>nul
===============================================
上面例子中,由於第一成功的刪除了註册表,導致第二次因為找不到註册表而宣告失敗。同時我們也看到了errorlevel的使用方法,即if errorlevel 0和if %errorlevel%==0是一樣的。也許你註意到了,裏面還有個笑臉呢~O(∩_∩)O哈哈~這就是ASCII碼啦,後面跟你講啊…
一般情況下,程序或命令成功執行時,返回的errorlevel是0,錯誤時返回1或更高的值。當然,有些命令是沒有返回值的,這點需要註意。
嗯,有沒有想起前面有個類似的東西啊?對了,那就是||和&&了,這兩個符號就是根據errorlevel的值來進行邏輯判斷的~
【(四)用戶交互 】
批處理 ,黑框白字是它最著名的特徵。雖然當初DOS為人們使用計算機做出了莫大的貢獻,但在Windows盛行的今天,人們已經疏遠並且懼怕那個黑色的窗口了。微軟為了讓先天有着批量處理“體力活”能力的DOS避免“冷酷”,便於接近,特意提供了幾個小命令,加強批處理 的用戶交互功能。
【 1、視窗 】
首先我們要DIY它的窗口。使用命令:color、mode、msg。
--1、設置窗口背景色和字體顔色by color。詳細內容參見color /?。
--2、設置窗口大小by "MODE CON [COLS=c] [LINES=n]",cols即寬度,lines即高度。
--3、GUI交互窗口by msg。詳細內容參見msg /?。
視窗DIY舉例:
===============================================
@echo off
set a=10
set b=0
:tex
set /a a+=3
set /a b+=1
mode con cols=%a% lines=%b%
if %a% lss 60 goto :tex
echo O(∩_∩)O 聖誕快樂 O(∩_∩)O
set a=15,a6,2e,d0,34,8b,4f,9d,5e
for %%i in (%a%) do (
ping -n 2 127.1>nul
color %%i
)
for %%i in (%a%,%a%) do (
ping -n 1 127.1>nul
color %%i
)
>>ms.txt echo */. . . * .
>>ms.txt echo .* . [] * __
>>ms.txt echo */ . ./~~~~~~~~~~~~'. ^|◆
>>ms.txt echo * ,/,..,,...........,.◆
>>ms.txt echo ^|^| ..▎# ▎田 田 ▎ ^| ▎◆
>>ms.txt echo ^|^| ^&^&▎ ▎ ▎'^|'▎ o
>>ms.txt echo ^|^| ##■■■■■■■■■■〓
msg %username% /w /time:3600 <ms.txt
del ms.txt
pause
===============================================
【 2、聲音 】
呵呵,是不是註意到了批處理 沒有聲音吶?閑話不說,直接做實驗吧 ^_^
===============================================
@echo off
echo 做好準備,響了啊!!
pause
cls
echo
echo 怎麽樣?呵呵,刺激吧~
pause
cls
mshta vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")(window.close)
pause
===============================================
此處,這個就是調用vbs的方法:vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")
speak 好像不能講中文吶~
其實不然,如果tts安裝了中文引擎是可以講中文的。
【 3、控製 】
在運行批處理 的過程中,我們如何幹預批處理 呢?呵呵,直接點叉叉就可以結束它了!嗯,不錯,不過,太野蠻了~
--1、暫停批處理 :直接按鍵盤上的Pause鍵嘍
--2、終止批處理 :組合鍵Ctrl+C。不過,有時候它好像響應的不太積極啊…
【(五)ASCII碼 】
前面的例子中,我們已經使用過一次ASCII碼了,也就是那個笑臉。ASCII碼是圖形化的符號,可以用來點綴我們的批處理 的。
在cmd窗口中我們可以通過任意一個字符的ASCII碼來輸入該字符,比如Ctrl+G、Ctrl+N等,字母a-z對應ASCII碼的97-122。對於ASCII碼大於26的字符,可以通過這個方法來輸入:按住Alt鍵不鬆,通過小鍵盤輸入ASCII碼的十進製值,鬆開Alt鍵即可。 pichuli
批處理
batch processing
把要處理的信息分成組,成批地交給信息係統自動處理。在以計算機為主的信息係統中,信息的輸入、輸出速度與信息處理的速度不相匹配。為了減少人工操作時間和改善機器的利用情況,把要處理的信息(例如工資卡、庫存記錄等)按一定周期收集在一起,成批地交給係統進行處理。所有的作業也可適當地分批,係統啓動後自動地處理第一個作業,處理完後不需操作員幹預而自動地過渡到處理下一個作業,直至一批作業處理完畢為止。
早期的批處理 對作業的輸入輸出采取聯機處理,高速的中央處理機要等待低速的聯機輸入、輸出設備,不能發揮應有的效率。後來采用脫機處理:先把若幹個作業輸入到磁帶上,中央處理器從磁帶上把作業調入並執行,作業完成後把結果記錄在磁帶上,再由外圍機將磁帶上的信息輸出。這樣中央處理機得以擺脫低速的輸入、輸出設備的牽製,提高處理能力(見圖批處理 與聯機處理)。
如果數據是在遠方收集,通過終端送入數據採集器,數據採集器先將一段時間內的信息存儲起來,再通過傳輸綫路將它們成批地送入係統進行處理,則這種處理方式稱為遠程批處理 。
批處理 能有效地提高計算機的利用率,是最經濟的處理方法。但是在批處理 中,用戶提交作業後便失去了對作業的控製和修改能力,用戶必須以作業說明書的形式嚮係統提供控製信息,還需要估計運行過程中可能出現的問題,並把處理方法事先告訴係統。對新的處理作業,用戶無法預測可能出現的事件,所以希望係統有與用戶交互作用的能力(見交互式處理)。這種情況不適合采用批處理 。另外,在批處理 係統中,用戶提交作業後通常要經過幾小時甚至幾天的時間才能得到所需要的結果,這樣長的周轉時間對那些僅計算一個很小的題目,或衹對已存文件作幾行修改的短作業用戶非常不便,尤其對時間緊迫的作業更不宜選用批處理 方式。在大型處理係統中,批處理 經常是後臺作業,前臺作業采用分時處理。
批處理 按作業的處理次序可以分為順序批處理 和隨機批處理 。
順序批處理 對成批的信息按規定的順序自動地依次進行處理。傳統的處理方法是父-子方法。按信息處理要求對原來的主文件(父)進行修改,建立新的主文件(子),將它作為下一次運行的父文件,而原來的父文件自動地成為後備文件。這種處理方式的優點是主記錄的插入、刪除容易,新老文件可以選用同一類型的外圍設備,平均訪問時間短。缺點是老文件中不常用的部分也必須寫入新文件。
順序批處理 中,信息輸入的順序必須與文件的順序嚴格一致。事先把信息經過分類和排序,記錄在磁帶或卡片上,批處理 一旦開始,在一個預定的時間內,所有適當的信息都進入係統,順序地進行處理。
隨機批處理 對成批的信息僅處理需要的部分,而對其他無關部分不加任何處理(見隨機存取)。
(鬍銘曾) : batch, batch Process, Batch Processing dos 命令 程序 工具 操作係統 vbs jsp 內部命令 高級編程語言 病毒 計算機 蠕蟲
成批處理 分批處理 批處理類 批處理技術 批處理文件 批處理程序 批處理係統 多道批處理 批處理病毒 實時批處理 順序批處理 分批處理法 成批處理中斷 遠程成批處理 成批處理方式 成批處理命令 成批處理終端 交互式批處理 多功能批處理 成批處理的程序 批處理操作係統 自動批處理文件 分批處理反應器 創建快捷批處理 脫機成批處理係統 批處理文件的擴展名 多道批處理操作係統 多功能批處理v1.22 utoexec.bat自動批處理 文件 實時批處理監控程序 無敵文件批處理大師 禁止在屏幕上顯示批處理 命令行 禁止批處理 命令行顯示屏幕上 批處理 在提高Windows管理效率中的神奇應用批處理 命令在Windows操作中的典型應用批處理 命令在服務器管理中的典型應用無敵文件批處理 大師v1.2 批處理 命令在操作中的典型應用批處理 在提高管理效率中的神奇應用