批處理 Bat文件編寫

from http://my.oschina.net/u/131904/blog/112770

其實編寫bat文件應用就這麼點應該足夠我們寫出自己需要的BAT了,當然還有很多很多命令與使用方法我這裏並沒有提到,這些只是把大家帶進門而已,至於如何修行,看大家自己的了。關鍵還是興趣與大量的實踐。

  
  第一節:(主要是一些界面形式功能的實現以及初始化)
  1.“@echo off”--我們所寫的BAT一開始一般都有這一句,這一句的作用是:使所有的命令響應隱藏。“@”--本行命令不回顯。(本來如果你用echo off就可以了,但是還是能夠看到echo off這條命令在CMD下,影響美觀)
  2.“color 1e”--設置默認的控制檯前景和背景顏色。當前我設爲藍底黃字,具體顏色請在CMD下用“color /?”查詢。
  --這裏又提到了這個參數“/?”,一般CMD下命令後加“/?”就會顯示這條命令的幫助。
  3.“rem”--註釋作用,批處理執行過程中前不執行它,rem 後的字符只作註釋作用。
  4.“title”--設置命令提示窗口的窗口標題。默認爲“cmd”。改成自己喜歡的多有個性,嘿嘿。
  5.“cls”--不多說,清屏命令。主要是怕前面的一些空白或字符出現影響美觀。
  6.“set”--這個命令的作用很大,請用“set /?”查詢具體使用方法。本例“set topip=172.16.”是將一個名爲“topip”的變量值設爲“172.16.”。注意CMD下變量的設置不區別數字與字符,能夠自動根據提供的值調整。下行“set theip=0.0”同理。
  7.“echo .”--在新行中顯示一個“.”。echo命令能顯示其後的comment。這裏提幾個有趣實用的用法--“echo.”,注意與前面的不同,“echo”與“.”間無空格。這條命令如同一個回車,在新行不顯示任何信息並換行。“@echo”,實現響鈴的提示音。後面一個字符的輸入方法是在CMD下用“ctrl+G”,而這個字符得到的方法是CMD下用命令“echo "ctrl+G" >ex.txt”,存入ex.txt文件,再從那裏提取出來的。嘿嘿,如果你懶得做,就copy我在上面提供的字符嘍。
  8.“if”--這條命令也會經常用到,請用“if /?”學習更多信息。本例“if not exist scanipc.exe (echo 文件錯誤!……)”,實現功能:當同級目錄下不存在“scanipc.exe”時,提示“文件錯誤!……”。否則不提示。“if not exist filename”在批處理中使用比較多些。
9.“:top”,設置一個標誌點,標誌名爲“top”。“:”的作用就是設置標誌。網上有文章說“使用"::comment"作爲註釋比"rem comment"執行效率更高。”我相信,這裏也建議大家,如果BAT中註釋較多時,請使用“::comment”設置。
10.“set /p pno=”--設置一個變量,並接受用戶輸入。BAT不需要預先聲明變量,只在需要時設置。參數“/p”:將變量數值設成用戶輸入的一行輸入。
11.“if %pno% gtr 9 gotoonerrorspno”--檢驗用戶輸入值是否大於9,是,則轉到一個指定標誌點。這裏注意BAT中變量引用時要在前後加“%”,但在if語句中可有可無,具體應用大家多寫幾遍就有體會。
  12.“goto label”--無條件跳轉到指定標誌位並向後執行。BAT好像只有這麼一個跳轉語句了,作用不用我說,用了就知道。
  注意不要構成死循環。
小結:到此,完成了顏色設置、註釋版權說明、標題設置、變量初始化、歡迎信息、功能界面初始化、標誌點設置(因爲歡迎信息只顯示一次而功能界面要多次使用所以將標誌點設置在歡迎信息的後面。)命令的接受與跳轉。
;功能界面一般要用“tab”鍵調整相對位置,才能起到美觀的效果。請多練習幾遍領會。
  ;大家在寫腳本過程中要注意標誌點的設置位置,才能起到合適的效果。一般寫過幾個腳本會有些感受。
  ;接着接受用戶輸入後“cls”清屏開始執行指定功能。注意這個cls的作用。因爲清屏可以在此時,也可以在每個命令執行之前,但如果在每個命令執行之前用的請,那麼要寫的cls就多了,於是把cls寫在這裏合適,方便節約快捷。大家在寫腳本時也應當注意這方面的技巧,將使你寫出更加高效節約方便的代碼。在每次寫完腳本後合理地整合一下自己的代碼。能積累不少經驗。
  ;另外,鑑於部分人仍不知道如何建立BAT文件與運行,請:打開記事本,寫入代碼,保存,保存類型爲“所有文件*.*”,文件名爲“name*.BAT”。保存後,雙擊運行。因爲一般BAT運行很快,所以你可能只看到窗口一閃就消失了,那麼你可以在exit之前加pause確保能看見運行結果。
  到此,你應該能夠寫一個很簡單的腳本了,實現一些界面控制。
  例1:
  @echo off
  color ca
  title 這是我第一個BAT腳本。
  echo 這是我第一個BAT腳本。不錯啊。
  pause >nul
exit
第二節:(提一些好用的命令)
  以下設置的都是功能段,在“goto step%pno%”跳轉到相應功能段後,開始執行相應功能。
  一般命令段:
  step1:ping命令。(在echo中變量的引用請注意前後加“%”號,否則會導致程序出錯。)
  我們常用的ping命令:其實很簡單,自己看幫助啦。
  本句“ping %topip%%theip% -n 1 |findstr 100%>nul”將ping 只發送一次數據包,這樣命令執行起來就快多了,但這樣所會引起一定概率的誤判,而我們在內網這種概率很低,低到可以忽略。所以本人使用參數“-n 1”減少執行時間。將結果不回顯而通過管道命令“|”送給findstr分析,findstr查找是否存在“100%”,並將回顯“丟棄”--“>nul”。因爲如果ping一臺主機如果返回的結果有“100%”存在說明“不在線。或者有防火牆阻擋。”。所以用findstr確定字符串“100%”的存在性,因爲findstr也有回顯,但我們並不需要,所以將它“丟棄”,使用參數“>nul”將指定命令回顯丟棄。(這一句命令是重點,請仔細領會。)
  又因爲findstr確定指定字符串的存在性後會設定環境變量“errorlevel”的值,所以我們根據“if %errorlevel% equ 0(command)”,判斷findstr的執行結果就行了,也就不需要有回顯。
  “errorlevel”作用很大,一般命令行下的命令執行後都有一個特別的errorlevel,我們就可以根據相應的“返回值”作出相應判斷並執行相應功能。findstr如果找到指定字符串,則有errorlevel=0,說明:IP不在線。那麼既然不在線,我們就沒有向
  下執行的必要了,直接跳回top界面功能接受下一次指令。
  如果IP有不同迴應,說明在線,則開始檢測共享。“net view \\%topip%%theip%\”--查看指定IP的共享清單。net詳細命令請自行查閱。
  列出共享清單後返回功能界面。
  step2:打開共享一。“explorer \\%topip%%theip%\”,用資源管理器打開指定的IP根。注意語法,其它也沒有什麼。
  step3:IPC$空連接。“net use \\%topip%%theip%\ipc$"" /user:"administrator"”,一個很老的漏洞,但也許內網還有機子存在哩,嘿嘿,語法就是這樣。
step4:一般信息。“ipconfig /all”--用於得到本機的IP與MAC等信息,很好用的命令。語法如示。“nbtstat -na %topip%%theip%”--用於得到他方機子的一些信息,語法如示。另請自查幫助。
step5:Scanipc。用命令行打開了一個程序而已。在命令行下執行其它命令也就是這樣啦。
  step6:返回時間。“net time \\%topip%%theip%”--探測指定機子時間,語法如示。
  step7:遠程連接。“net use \\%topip%%theip%\admin$"" /user:"administrator"”,嘿嘿,administrator空密碼連接。
  最簡單的入侵啦,嘿嘿嘿。語法如示。
  step8:本機信息。跳到另一個功能界面執行相應功能。
  step9:高級命令。跳到另一個功能界面執行相應功能。
  step0:退出程序。一個exit退出腳本。“exit”,退出CMD。
  onerrorsip:實現錯誤提示,並重新執行step1。
  onerrorspno:實現錯誤提示,並重新跳轉到功能界面。
  高級命令段:
  引用前面已給定的IP,並對其進行一些高級操作。重新繪製功能界面。
  首先,注意在一個BAT文件中,不允許出現有標誌名的重複。
  step11:條件連接。設定兩個變量,分別爲用戶名與密碼。注意到有一個默認的功能。實現原理是,當接受到用戶輸入爲空時
  (即一個回車),變量將保持不變。條件連接語法如示。比前面遠程空密碼連接更高級一點,嘿嘿。
  step12:打開共享。打開已經連接成功的對方計算機的指定盤。打開指定盤語法如示。
  step13:發送消息。向對方發送消息。要求雙方的messager服務開啓,否則無法發送成功。發送消息語法如示。
step14:遠程關機。設置關機時間與關機理由,用shutdown程序關閉對方計算機,嘿嘿,惡作劇。要求你連接成功,並有shutdown程序支持。shutdown語法自查幫助。
step15:溢出CMD。嘿嘿,溢出到對方的CMD下,算是一個真正的入侵了。當然需要用戶名與密碼嘍。要求用戶名與密碼正確並對方默認支持遠程管理。並有psexec程序支持。psexec語法如示,並請自查幫助。
  step16:結束進程。嘿嘿,不說也知道,結束對方已知進程。要求連接成功並有pskill程序支持。惡作劇類,有惡意成分。嘿嘿。小心使用。
  step17:ipc$連接。同step3.
  step18:斷開連接。斷開與對方的連接,就是擦屁股啦,以免讓對方有所察覺。這個好習慣要養成。語法如示。
  step19:一般命令。返回前面一個功能界面。
  step20:結束程序。退出。
  step110:AT命令,令對方在指定時間運行指定命令。有點像木馬,嘿嘿。要求連接成功。因爲節約變量,所以引用了前面的暫不使用的變量。好習慣。哈哈。
  step111:telnet。遠程telnet。不要說你一點都不知道,語法如示並請自查幫助。
  step112:更改主IP。主要是爲了使我們的使用方便,對某個特定IP段探測能夠簡化輸入。如主IP改成“172.16.130.”,那麼專門對130探測,而且輸入IP時只需輸入最後位,嘿嘿,多方便啊。
  step113:任意命令。主要是接受用戶輸入並執行用戶的輸入罷了,結構如示。
  本機信息段:主要是對本機信息的一些查詢語法。
  stepm1:ipconfig,不說了。
  但請注意到,在功能界面的實現上有一點,“&”符號,因爲“&”符號在CMD下是命令連接符,如果光用“&”會讓BAT誤解爲其後的都是命令。但我們只是希望輸出一個“&”罷了,於是用“^”符號連接符表明只是輸出“&”,而不是實現命令連接。
  這裏提一下“&”命令連接符,
  例如:echo frist&echo second.同效於:echo frist  echo second.
  只是實現結合兩行命令在同一行實現。類如一個很簡單的批處理啦。
  再提一下“^”符號連接符,對一些特殊符號可能在CMD下無法正確如願顯示,可用“^”連接,以達到如期效果。
  用了“^”在文本中佔了一位空間,但在輸出時它並不顯示,所以注意界面的佈置。
  stepm2:本機進程。利用命令行下的進程工具查看進程。要求pslist程序支持。
  stepm3:本機用戶。就是查詢一下本機用戶,也許會發現機了被動過的痕跡。
  stepm4:結束進程。在命令行下結束本機進程。要求有pskill程序支持。
  stepm5:本機端口。也許能看出被攻擊或被入侵的痕跡。語法如示。
  stepm6:共享情況。看看本機的共享是否真的如你所想,如你所見。否則請注意安全嘍。語法如示。
  stepm7:啓動項值。在命令行下導出啓動項值並給出結果。比魔法兔子什麼的快多了,就是界面不是很好看,呵呵。語法如示。
  stepm0:退出程序。退出。
  小結:到此,您學習過了一些有用的命令與應用。以及大部分的網絡命令與外部程序的使用。接下來你可以模擬IP小工具寫出適合更自己的IP小工具哦。注意每執行完一項功能後要用goto返回功能界面,否則腳本無條件向下繼續執行。
  ;errorlevel的應用。在BAT中,errorlevel的作用很大,大家在使用過程中通過多次接觸,感受一下如何玩轉errorlevel。在執行完一個程序後,可以用echo %errorlevel%查看程序運行後是如何設定errorlevel的值。
  ;if的應用。在BAT中,if語句的作用也很大,特別與errorlevel結合實現自動判斷。以及一些基本條件判斷。請查看"if /?"學習更詳細的說明。
  ;變量的接受與傳遞。這方面的感覺需要大家多寫BAT纔能有所感觸。如何合理與高效的應用變量,能使你的腳本更加漂亮。
計算機語言都是實踐性很強的,我們學習理論只是基礎,通過大量的實踐才能真正掌握一門語言的應用。
第三節:(一些應用技巧與命令)
  接下來我們看我的“代理服務器搜索組件 (ver 2.1)”,
  1.“>”與“>>”的區別。
  “>”--把指定數據傳送到指定文件或區域。有覆蓋作用,從文件頭開始重寫文件。如指定文件不存在,則新建文件並存入指定數據。
  “>>”--以追加方式將指定數據傳送到指定文件或區域。從文件結尾開始寫入指定內容。
  這兩個功能有區別,請注意選擇合適的傳送方式傳送數據。
  例如:“echo 文本內容。>link.txt”與“echo 文本內容。>>link.txt”。若本不存在文件link.txt或文件link.txt內容爲空,那麼兩條命令的運行結果相同。但如果link.txt不爲空,那麼第一條命令將清除link.txt所有內容並存入數據“文本內容。”保存。而第二條命令只在link.txt的文件尾(另起一行,注意每一個“>>”都會另起一行寫入新數據)追加數據“文本內容。”而以前的內容保持不變。
  還要特別提一個前面說過的“丟棄”用法“>nul”,因爲我們有時候只需要命令的運行而並不需要看到命令的運行結果以及回顯,但這些命令又會出現我們並不需要看到的回顯,影響美觀。故在其後追加“>nul”,丟棄回顯。
  2.循環語句的說明。
  例2:
  :puship
  set /p tip=
  if %tip%==%tbip% goto step1 
  set tbip=%tip%echo %tip% >>link.txt
  goto puship
  本例中“if %tip%==%tbip% goto step1”與“if %tip% equ %tbip% goto step1”效果一樣。
  本例的作用是接受用戶帖入數據。關鍵技術在於:因爲用戶帖入數據我們不能使用戶每次輸入都詢問是否結束,而需要實現“智能化”的判斷,但如何以最少的代碼、最簡單的方法實現所謂的“智能化”呢。分析用戶輸入情況:因爲一般用戶帖入數據都不會出現重複,所以我們利用這個特點,分析用戶的數據,當用戶帖入列表時,分析數據並將數據存入相應文本,以備後用。當用戶粘帖文本結束後,再加一個回車,因爲最後一次變量沒有接受到任何修改,於是保持默認不變(也就是之前的數據。),再通過我們之前的數據備份對照,分析是否不變,是,則跳出循環。這樣,我們通過兩個變量以一個IF比較實現相對簡單的“智能化”。嘿嘿,這一點代碼想了我一個小時。這麼說不知道大家是否能理解。請仔細參透例2的技術要點。
  3.“FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt) do (set /a Allip=Allip+1>nul)”
  這句FOR語句是複雜的雜合語句。首先請用for /?查閱詳細用法,這裏不再複述。
  但是特別要提一點的就是批處理與直接命令行下的CMD的區別在FOR語句上。批處理時,變量引用需要有兩個“%”號,否則無法正確執行,而CMD下不用,只需一個“%”。
  “set /a Allip=Allip+1>nul”--實現算術運算,變量Allip的自增,注意大小寫。把回顯“丟棄”。
  本例實現對文件link.txt內容計數,忽略以“;”開頭的行。這就是爲什麼我們在前面要用“echo ;:文本>link.txt”來創建文本的意義所在。4.“call toping %%i”--從批處理程序調用另一個批處理程序。調用另一個批處理“toping.bat”(因爲BAT可以直接運行所以不需要後綴BAT),並有參數傳遞。參數來自於FOR語句的提取。“FOR /F "eol=; tokens=1 delims=: " %%i in (link.txt)
  ”--從link.txt的每行中提取文本,從每行的開頭第一個字符開始(tokens=1),以“:”界定提取結尾(delims=: )。把提取結果賦給變量i。
  5.“type”--在命令行下顯示指定文件的內容。相信大家應該很熟悉,不多說了。注意與“>或>>”的結合使用,或與其它操作符的結合使用。
  6.“%1”--在CMD下,一個BAT能夠接受同時9位的參數,“%1~%9”,分別對應給定的參數變量。“%0”,即是文件本身。我們在使用BAT的過程中會經常遇到兩個或兩個以上腳本間需要參數傳遞。那麼請好好掌握這個用法,多說無益,需要大家在實踐中積累經驗。
  7.再說一些比較邊緣,但大家比較興趣的命令。呵呵,不要做壞事。
  net user admin 123 /add
  net localgroup administrators admin /add
  net localgroup users admin /del
  net user admin /active:yes
  net user
  net user admin
  net user admin /del
  “net user admin 123 /add”--添加名爲“admin”,密碼爲“123”的用戶,如果“123”不寫,則默認密碼爲空。
  “net localgroup administrators admin /add”--將用戶“admin”加入“administrators”組,嘿嘿,高權限。
  “net localgroup users admin /del”--將“admin”從“users”組刪除。呵呵,因爲用戶新加進去時都是“users”組,權限比較低,所以要從這個組跳出來,保證administrators組的權限正式發揮作用,如果不這麼做,對方系統會默認你的最低權限。
  “net user admin /active:yes”--怕沒法使用沒有啓動,不要緊,激活這個帳號,嘿嘿。
  “net user”--看看用戶有多少哦。“net user admin”--看看剛剛加的用戶信息如何,是否如我所想,如我所願呢。
“net user admin /del”--刪除用戶admin。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章