批處理程式

批處理程式

一個ASCII(無格式文本)檔案,它包含一個或多個作業系統命令。批處理程式的檔案名稱的擴展名是.cmd 或.bat。當您在命令提示中鍵入檔案名稱,或者當從另一個程式運行批處理程式時,其命令將按順序處理。批處理程式也被稱為批處理檔案,也稱為批處理腳本,英文譯為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按照該檔案中各個命令出現的順序來逐個運行它們。使用批處理檔案(也被稱為批處理程式或腳本),可以簡化日常或重複性任務。當然我們的這個版本的主要內容是介紹批處理在入侵中一些實際運用,例如我們後面要提到的用批處理檔案來給系統打補丁、批量植入後門程式等。下面就開始我們批處理學習之旅吧。

簡單內部命令

Echo 命令

打開回顯或關閉請求回顯功能,或顯示訊息。如果沒有任何參數,echo 命令將顯示當前回顯設定。

語法

echo [{on|off}] [message]

Sample:@echo off / echo hello world

在實際套用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命令到特定格式的檔案中.這將在以後的例子中體現出來。

@ 命令

表示不顯示@後面的命令,在入侵過程中(例如使用批處理來格式化敵人的硬碟)自然不能讓對方看到你使用的命令啦。

Sample:@echo off

@echo Now initializing the program,please wait a minite...

@format X: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個參數給我們,效果和/y是一樣的。)

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命令就是根據這個:來尋找下一步跳到到那裡。最好有一些說明這樣你別人看起來才會理解你的意圖啊。

Rem 命令

注釋命令,在C語言中相當與/*--------*/,它並不會被執行,只是起一個注釋的作用,便於別人閱讀和你自己日後修改。

Rem Message

Sample:@Rem Here is the description.

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 命令會使程式掛起,以便您更換磁碟,然後按任意鍵繼續處理。

Call 命令

從一個批處理程式調用另一個批處理程式,並且不終止父批處理程式。call 命令接受用作調用目標的標籤。如果在腳本或批處理檔案外使用 Call,它將不會在命令行起作用。

語法

call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

參數

[Drive:}[Path] FileName

指定要調用的批處理程式的位置和名稱。filename 參數必須具有 .bat 或 .cmd 擴展名。

start 命令

調用外部程式,所有的DOS命令和命令行程式都可以由start命令來調用。

入侵常用參數:

MIN 開始時視窗最小化

SEPARATE 在分開的空間內開始 16 位 Windows 程式

HIGH 在 HIGH 優先權類別開始應用程式

REALTIME 在 REALTIME 優先權類別開始應用程式

WAIT 啟動應用程式並等候它結束

parameters 這些為傳送到命令/程式的參數

執行的應用程式是 32-位 GUI 應用程式時,CMD.EXE 不等應用程式終止就返回命令提示。如果在命令腳本內執行,該新行為則不會發生。

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,檔案結束。

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。

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 命令替代,然後根據輸入做判斷操作.

相關詞條

相關搜尋

熱門詞條

聯絡我們