批處理教程
簡明批處理教程
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:\back
echo Please put a new disk into driver A
pause
goto begin
在這個例子中,驅動器 A 中磁碟上的所有檔案均複製到d:\back中。顯示的注釋提示您將另一張磁碟放入驅動器 A 時,
pause 命令會使程式掛起,以便您更換磁碟,然後按任意鍵繼續處理。
6.Call 命令
從一個批處理程式調用另一個批處理程式,並且不終止父批處理程式。call 命令接受用作調用目標的標籤。如果在腳
本或批處理檔案外使用 Call,它將不會在命令行起作用。
語法
call 【【Drive:】【Path】 FileName 【BatchParameters】】 【: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:\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,檔案結束。
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 命令來分析命令的