寫(xiě)這篇教程的目的,是讓每一個(gè)看過(guò)這些文字的朋友記住一句話(huà):如果愛(ài)可以讓事情變的更簡(jiǎn)單,那么就讓它簡(jiǎn)單吧!看這篇教程的方法,就是慢!慢慢的,如同品一個(gè)女人、一杯茗茶,你會(huì)發(fā)現(xiàn)很多以前就在眼前的東西突然變的很遙遠(yuǎn),而有些很遙遠(yuǎn)的東西卻又突然回到了眼前。..
先概述一下批處理是個(gè)什么東東。批處理的定義,至今我也沒(méi)能給出一個(gè)合適的----眾多高手們也都沒(méi)給出----反正我不知道---看了我也不一定信服----我是個(gè)菜鳥(niǎo),當(dāng)然就更不用說(shuō)了;但我想總結(jié)出一個(gè)“比較合適的”,而且我也相信自己可以把它解釋的很清楚,讓更多的菜鳥(niǎo)都知道這是個(gè)什么東東,你用這個(gè)東東可以干什么事情?;蛟S你會(huì)因?yàn)檫@篇文章而“無(wú)條件愛(ài)上批處理”,那么我的目的就達(dá)到了----我就是要讓你愛(ài)上它,我就這么拽,你能怎么著??真的,愛(ài)有時(shí)候就這么拽,就是這么沒(méi)理由,就是這么不要臉!真的!
按照我的理解,批處理的本質(zhì),是一堆DOS命令按一定順序排列而形成的集合。
OK,never claver and get to business(閑話(huà)少說(shuō)言歸正傳)。批處理,也稱(chēng)為批處理腳本,英文譯為BATCH,批處理文件后綴BAT就取的前三個(gè)字母。它的構(gòu)成沒(méi)有固定格式,只要遵守以下這條就ok了:每一行可視為一個(gè)命令,每個(gè)命令里可以含多條子命令,從第一行開(kāi)始執(zhí)行,直到最后一行結(jié)束,它運(yùn)行的平臺(tái)是DOS。批處理有一個(gè)很鮮明的特點(diǎn):使用方便、靈活,功能強(qiáng)大,自動(dòng)化程度高。我不想讓自己寫(xiě)的教程枯燥無(wú)味,因?yàn)闋坷p到代碼(批處理的內(nèi)容算是代碼吧?)的問(wèn)題本來(lái)就是枯燥的,很少有人能面對(duì)滿(mǎn)屏幕的代碼而靜下心來(lái)。所以我會(huì)用很多簡(jiǎn)單實(shí)用的例子讓讀這篇教程的朋友去體會(huì)批處理的那四射的魅力,感受它那古靈精怪的性格,不知不覺(jué)中愛(ài)上批處理(暈,怎么又是愛(ài)?到底批處理和愛(ài)有什么關(guān)系?答案:沒(méi)有!)。再說(shuō)句“閑話(huà)”:要學(xué)好批處理,DOS基礎(chǔ)一定要牢!當(dāng)然腦子靈活也是很重要的一方面。
例一、先給出一個(gè)最easy的批處理腳本讓大家和它混個(gè)臉熟,將下面的幾行命令保存為name.bat然后執(zhí)行(以后文中只給出代碼,保存和執(zhí)行方式類(lèi)似):
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?但它的作用卻是很實(shí)用的,執(zhí)行這個(gè)批處理后,可以在你的當(dāng)前盤(pán)建立一個(gè)名為a.txt的文件,它里面記錄的信息可以幫助你迅速找到速度最快的QQ服務(wù)器,從而遠(yuǎn)離“從服務(wù)器中轉(zhuǎn)”那一痛苦的過(guò)程。這里>的意思,是把前面命令得到的東西放到后面所給的地方,>>的作用,和>的相同,區(qū)別是把結(jié)果追加到前一行得出的結(jié)果的后面,具體的說(shuō)是下一行,而前面一行命令得出的結(jié)果將保留,這樣可以使這個(gè)a.txt文件越來(lái)越大(想到如何搞破壞了??)。By the way,這個(gè)批處理還可以和其他命令結(jié)合,搞成完全自動(dòng)化判斷服務(wù)器速度的東東,執(zhí)行后直接顯示速度最快的服務(wù)器IP,是不是很爽?后面還將詳細(xì)介紹。
例二、再給出一個(gè)已經(jīng)過(guò)時(shí)的例子(a.bat):
@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
為什么說(shuō)這是個(gè)過(guò)時(shí)的例子呢?很簡(jiǎn)單,因?yàn)楝F(xiàn)在已經(jīng)幾乎沒(méi)有人用帶廣告的QQ了(KAO,我的QQ還顯示好友三圍呢?。。?,所以它幾乎用不上了。但曾經(jīng)它的作用是不可小窺的:刪除QQ的廣告,讓對(duì)話(huà)框干干凈凈。這里用的地址是QQ的默認(rèn)安裝地址,默認(rèn)批處理文件名為a.bat,你當(dāng)然可以根據(jù)情況自行修改。在這個(gè)腳本中使用了if命令,使得它可以達(dá)到適時(shí)判斷和刪除廣告圖片的效果,你只需要不關(guān)閉命令執(zhí)行后的DOS窗口,不按CTRL+C強(qiáng)行終止命令,它就一直監(jiān)視是否有廣告圖片(QQ也再不斷查看自己的廣告是否被刪除)。當(dāng)然這個(gè)腳本占用你一點(diǎn)點(diǎn)內(nèi)存,呵呵
學(xué)會(huì)批處理!真心想學(xué)很容易!
例三,使用批處理腳本查是否中冰河。腳本內(nèi)容如下:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" echo "Congratulations! You have infected GLACIER!"
del a.txt
pause exit
這里利用了netstat命令,檢查所有的網(wǎng)絡(luò)端口狀態(tài),只需要你清楚常見(jiàn)木馬所使用的端口,就能很easy的判斷出來(lái)是否被人種了冰河。然這不是確定的,因?yàn)楸幽J(rèn)的端口7626,完全可以被人修改。這里介紹的只是方法和思路。這里介紹的是方法和思路稍做改動(dòng),就變成可以檢查其他木馬的腳本了,再改動(dòng)一下,加進(jìn)去參數(shù)和端口及信息列表文件后,就變成自動(dòng)檢測(cè)所有木馬的腳本了。呵呵,是不是很過(guò)癮?腳本中還利用了組合命令和管道命令|,后面將詳細(xì)介紹。
例四,借批處理自動(dòng)清除系統(tǒng)垃圾,腳本如下:
@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\*.*
將以上腳本內(nèi)容保存到autoexec.bat里,每次開(kāi)機(jī)時(shí)就把系統(tǒng)垃圾給自動(dòng)刪除了。這里需要注意兩點(diǎn):一、DOS不支持長(zhǎng)文件名,所以就出現(xiàn)了Tempor~1這個(gè)東東;二、可根據(jù)自己的實(shí)際情況進(jìn)行改動(dòng),使其符合自己的要求。
下面是網(wǎng)上用的比較多的清理系統(tǒng)垃圾的bat
@echo off
echo 正在清理系統(tǒng)垃圾文件,請(qǐng)稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清理系統(tǒng)垃圾完成!
怎么樣,看到這里,你對(duì)批處理腳本是不是已經(jīng)有點(diǎn)興趣了?是不是發(fā)現(xiàn)自己已經(jīng)慢慢愛(ài)上了這個(gè)東東?別高興的太早,愛(ài)不是一件簡(jiǎn)單的事,它也許能帶給你快樂(lè)和幸福,當(dāng)然也能讓你痛苦的想去跳樓。如果你知道很難還敢繼續(xù)的話(huà),I 服了 YOU!繼續(xù)努力吧,也許到最后你不一定得到真愛(ài)(真的有這可能,愛(ài)過(guò)的人都知道),但你可以體會(huì)到整個(gè)愛(ài)的過(guò)程,就是如此。 酸、苦和辣,有沒(méi)有甜天知道。
為什么會(huì)把批處理和愛(ài)情扯上關(guān)系?不是我無(wú)聊,也不是因?yàn)檫@樣寫(xiě)有趣多少,原因有二:其一,批處理和愛(ài)情有很多相同的地方,有些地方我用“專(zhuān)業(yè)”的行話(huà)解釋不清(我不懷疑自己的表達(dá)能力,而是事情本身就不好說(shuō)清楚),說(shuō)了=沒(méi)說(shuō),但用地球人都知道的愛(ài)情一比喻(愛(ài)情是什么?我**怎么知道?。。瑳](méi)準(zhǔn)你心里一下就亮堂了,事半功倍,何樂(lè)而不為?其二,我這段時(shí)間狀態(tài)不是很好,感冒發(fā)燒頭疼鼻塞,但主要還是感情上精神摧殘,搞的人煩透了,借寫(xiě)教程之際感慨幾句,大家就全當(dāng)買(mǎi)狗皮膏藥了,完全可以省略不看(也許還真有點(diǎn)效果----不至于讓你看著看著就睡著了,把頭磕了來(lái)找我報(bào)銷(xiāo)醫(yī)藥費(fèi))。說(shuō)不定下次的教程中大家還會(huì)看到楊過(guò)、張無(wú)忌等金老前輩筆下的英雄們。
看過(guò)第一章的朋友,一定對(duì)批處理有了初步的印象,知道它到底是用來(lái)干什么的了。但你知道運(yùn)用批處理的精髓在哪里嗎?其實(shí)很簡(jiǎn)單:思路要靈活!沒(méi)有做不到的,只有想不到的。這和愛(ài)情就有點(diǎn)不同了,因?yàn)閻?ài)情的世界是兩個(gè)人的世界,一廂情愿不叫愛(ài)情(補(bǔ)充:那叫單戀。廢話(huà)?。┒幚韰s是一個(gè)人的天堂,你可以為所欲為,沒(méi)有達(dá)不到的境界!
批處理看起來(lái)雜亂無(wú)章,但它的邏輯性之強(qiáng),絕對(duì)不比其他程序語(yǔ)言(如匯編)低,如果你寫(xiě)的腳本是一堆亂麻,雖然每一行命令都正確,但從頭執(zhí)行到尾后,不一定得到你想要的結(jié)果,也許是一屏幕的Bad command or fail name。這又和愛(ài)情有了共同點(diǎn):按步驟來(lái)經(jīng)營(yíng),缺少或增多的步驟都可能導(dǎo)致不想看見(jiàn)的結(jié)果。陷入愛(ài)河的朋友,相信沒(méi)有不肯定這句話(huà)的。我的愛(ài)情批處理,輸出的結(jié)果不是Bad command or fail name,屏幕是這么顯示的:‘你的愛(ài)情'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。然后就是光標(biāo)不停閃動(dòng),等待這下一次錯(cuò)誤的輸入。
從這一章開(kāi)始,將由淺入深的介紹批處理中常用的命令,很多常見(jiàn)DOS命令在批處理腳本中有這廣泛的應(yīng)用,它們是批處理腳本的BODY部分,但批處理比DOS更靈活多樣,更具備自動(dòng)化。要學(xué)好批處理,DOS一定要有比較扎實(shí)的基礎(chǔ)。這里只講述一些比較少用(相對(duì)來(lái)說(shuō))的DOS命令,常用命令如COPY、DIR等就不做介紹了(這些看似簡(jiǎn)單的命令實(shí)際復(fù)雜的很,我怕自己都說(shuō)不清楚?。?。
例五,先看一個(gè)實(shí)例。這是一個(gè)很有意思的腳本,一個(gè)小巧實(shí)用的好東東,把批處理“自動(dòng)化”的特點(diǎn)體現(xiàn)的淋漓盡致。先介紹一下這個(gè)腳本的來(lái)歷:大家都知道匯編程序(MASM)的上機(jī)過(guò)程,先要對(duì)源代碼進(jìn)行匯編、連接,然后再執(zhí)行,而這中間有很多環(huán)節(jié)需要輸入很多東西,麻煩的很(只有經(jīng)歷過(guò)的朋友才懂得)。如何使這個(gè)過(guò)程變的簡(jiǎn)單呢?在我們搞匯編課程設(shè)計(jì)時(shí),我“被逼”寫(xiě)了這個(gè)腳本,用起來(lái)很爽,呵呵。看看腳本內(nèi)容:
@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
先不要被這一堆的東西給嚇怕了,靜下心來(lái)仔細(xì)的看(回想一下第一章中第一段是怎么寫(xiě)的?。。?。已經(jīng)給出了每一行命令的解釋?zhuān)瑑蓚€(gè)冒號(hào)后面的內(nèi)容為前一行內(nèi)容解釋的E文(害怕E文的朋友也不用擔(dān)心,都很easy,一看就懂了,實(shí)在不懂了不會(huì)查詞典啊,這么懶?),在腳本執(zhí)行時(shí)不顯示,也不起任何作用。倒數(shù)第5行行首有一個(gè)冒號(hào),可不是筆誤哦!具體作用后面會(huì)詳細(xì)講到。此腳本中masm和link是匯編程序和連接程序,必須和edit程序以及你要編輯的源代碼(當(dāng)然還有這個(gè)腳本,廢話(huà)!)一起在當(dāng)前目錄中。使用這個(gè)批處理腳本,可以最大可能的減少手工輸入,整個(gè)過(guò)程中只需要按幾下回車(chē)鍵,即可實(shí)現(xiàn)從匯編源代碼到可執(zhí)行exe文件的自動(dòng)化轉(zhuǎn)換,并具備智能判斷功能:如果匯編時(shí)源代碼出現(xiàn)錯(cuò)誤(匯編不成功),則自動(dòng)暫停顯示錯(cuò)誤信息,并在按任意鍵后自動(dòng)進(jìn)入編輯源代碼界面;如果源代碼匯編成功,則進(jìn)行連接,并在連接后自動(dòng)執(zhí)行生成的exe文件。另外,由于批處理命令的簡(jiǎn)單性和靈活性,這個(gè)腳本還具備良好的可改進(jìn)性,簡(jiǎn)單進(jìn)行修改就可以符合不同朋友的上機(jī)習(xí)慣。正在學(xué)匯編的朋友,一定別忘了實(shí)習(xí)一下!
學(xué)習(xí)批處理!包你學(xué)會(huì)(二)
在這個(gè)腳本中出現(xiàn)了如下幾個(gè)命令:@、echo、::、pause、:和goto、%以及if。而這一章就將講述這幾個(gè)命令。
1、@
這個(gè)符號(hào)大家都不陌生,email的必備符號(hào),它怎么會(huì)跑到批處理中呢?呵呵,不是它的錯(cuò),批處理本來(lái)就離不開(kāi)它,要不就不完美了。它的作用是讓執(zhí)行窗口中不顯示它后面這一行的命令本身(多么繞口的一句話(huà)?。?。呵呵,通俗一點(diǎn)說(shuō),行首有了它的話(huà),這一行的命令就不顯示了。在例五中,首行的@echo off中,@的作用就是讓腳本在執(zhí)行時(shí)不顯示后面的echo off部分。這下懂了吧?還是不太懂?沒(méi)關(guān)系,看完echo命令簡(jiǎn)介,自然就懂了。
2、echo
中文為“反饋”、“回顯”的意思。它其實(shí)是一個(gè)開(kāi)關(guān)命令,就是說(shuō)它只有兩種狀態(tài):打開(kāi)和關(guān)閉。于是就有了echo on和echo off兩個(gè)命令了。直接執(zhí)行echo命令將顯示當(dāng)前echo命令狀態(tài)(off或on)執(zhí)行echo off將關(guān)閉回顯,它后面的所有命令都不顯示命令本身,只顯示執(zhí)行后的結(jié)果,除非執(zhí)行echo on命令。在例五中,首行的@命令和echo off命令聯(lián)合起來(lái),達(dá)到了兩個(gè)目的:不顯示echo off命令本身,不顯示以后各行中的命令本身。的確是有點(diǎn)亂,但你要是練習(xí)一下的話(huà),3分鐘包會(huì),不會(huì)的退錢(qián)!
echo命令的另一種用法一:可以用它來(lái)顯示信息!如例五中倒數(shù)第二行,Default BAT file name is START.BAT將在腳本執(zhí)行后的窗口中顯示,而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
以上腳本內(nèi)容的編輯方法是,直接是命令行輸入,每行一回車(chē)。最后就會(huì)在當(dāng)前目錄下生成一個(gè)a.bat的文件,直接執(zhí)行就會(huì)得到結(jié)果。
3、::
這個(gè)命令的作用很簡(jiǎn)單,它是注釋命令,在批處理腳本中和rem命令等效。它后面的內(nèi)容在執(zhí)行時(shí)不顯示,也不起任何作用,因?yàn)樗皇亲⑨專(zhuān)皇窃黾恿四_本的可讀性,和C語(yǔ)言中的/*…………*/類(lèi)似。地球人都能看懂,就不多說(shuō)了。
4、pause
中文為“暫停”的意思(看看你的workman上),我一直認(rèn)為它是批處理中最簡(jiǎn)單的一個(gè)命令,單純、實(shí)用。它的作用,是讓當(dāng)前程序進(jìn)程暫停一下,并顯示一行信息:請(qǐng)按任意鍵繼續(xù). . .。在例五中這個(gè)命令運(yùn)用了兩次,第一次的作用是讓使用者看清楚程序信息,第二個(gè)是顯示錯(cuò)誤的匯編代碼信息(其實(shí)不是它想顯示,而是masm程序在顯示錯(cuò)誤信息時(shí)被暫它停了,以便讓你看清楚你的源代碼錯(cuò)在哪里)。
123下一頁(yè)閱讀全文