寫這篇教程的目的,是讓每個看過這些文字的朋友記住一句話:若是愛可讓事情變的更簡單,那麼就讓它簡單吧!看這篇教程的方法編程
腳本之家補充說明:批處理相對來講是比較簡單的語言,你們能夠經過多寫多看別人的實例來學習,不懂的百度一下。
這是一篇技術教程, 真心誠意會用很簡單的文字表達清楚本身的意思,只要你識字就能看懂,就能學到知識。寫這篇教程的目的,是讓每個看過這些文字的朋友記住一句話:若是愛可 以讓事情變的更簡單,那麼就讓它簡單吧!看這篇教程的方法,就是慢!慢慢的,如同品一個女人、一杯茗茶,你會發現不少之前就在眼前的東西忽然變的很遙遠, 而有些很遙遠的東西卻又忽然回到了眼前。.
先概述一下批處理是個什麼東東。批處理的定義,至今我也沒能給出一個合適的----衆多高手 們也都沒給出----反正我不知道----看了我也不必定信服----我是個菜鳥,固然就更不用說了;但我想總結出一個「比較合適的」,並且我也相信本身 能夠把它解釋的很清楚,讓更多的菜鳥都知道這是個什麼東東,你用這個東東能夠幹什麼事情。或許你會由於這篇文章而「無條件愛上批處理」,那麼個人目的就達 到了----我就是要讓你愛上它,我就這麼拽,你能怎麼着??真的,愛有時候就這麼拽,就是這麼沒理由,就是這麼不要臉!真的!
按照個人理解,批處理的本質,是一堆DOS命令按必定順序排列而造成的集合。
OK,never claver and get to business(閒話少說言歸正傳)。批處理,也稱爲批處理腳本,英文譯爲BATCH,批處理文件後綴BAT就取的前三個字母。它的構成沒有固定格式, 只要遵照如下這條就ok了:每一行可視爲一個命令,每一個命令裏
能夠含多條子命令,從第一行開始執行,直到最後一行結束,它運行的平臺是DOS。批處理有一個很鮮明的特色:使用方便、靈活,功能強大,自動化程度高。我不想讓本身寫的教程枯燥無味,由於牽纏到代碼(批處理的內容算是代碼吧?)
的 問題原本就是枯燥的,不多有人能面對滿屏幕的代碼而靜下心來。因此我會用不少簡單實用的例子讓讀這篇教程的朋友去體會批處理的那四射的魅力,感覺它那古靈 精怪的性格,不知不覺中愛上批處理(暈,怎麼又是愛?到底批處理和愛有什麼關係?答案:沒有!)。再說句「閒話」:要學好批處理,DOS基礎必定要牢!當 然腦子靈活也是很重要的一方面。
例1、先給出一個最easy的批處理腳本讓你們和它混個臉熟,將下面的幾行命令保存爲name.bat而後執行(之後文中只給出代碼,保存和執行方式相似): windows
是 不是都能看的懂?是否是很easy?但它的做用倒是很實用的,執行這個批處理後,能夠在你的當前盤創建一個名爲a.txt的文件,它裏面記錄的信息能夠幫 助你迅速找到速度最快的QQ服務器,從而遠離「從服務器中轉」那一痛苦的過程。這裏>的意思,是把前面命令獲得的東西放到後面所給的地 方,>>的做用,和>的相同,區別是把結果追加到前一行得出的結果的後面,具體的說是下一行,而前面一行命令得出的結果將保留,這樣可 以使這個a.txt文件愈來愈大(想到如何搞破壞了??)。By the way,這個批處理還能夠和其餘命令結合,搞成徹底自動化判斷服務器速度的東東,執行後直接顯示速度最快的服務器IP,是否是很爽?後面還將詳細介紹。
例2、再給出一個已通過時的例子(a.bat):
@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
爲 什麼說這是個過期的例子呢?很簡單,由於如今已經幾乎沒有人用帶廣告的QQ了(KAO,個人QQ還顯示好友三圍呢!!),因此它幾乎用不上了。但曾經它的 做用是不可小窺的:刪除QQ的廣告,讓對話框乾乾淨淨。這裏用的地址是QQ的默認安裝地址,默認批處理文件名爲a.bat,你固然能夠根據狀況自行修改。 在這個腳本中使用了if命令,使得它能夠達到適時判斷和刪除廣告圖片的效果,你只須要不關閉命令執行後的DOS窗口,不按CTRL+C強行終止命令,它就 一直監視是否有廣告圖片(QQ也再不斷查看本身的廣告是否被刪除)。固然這個腳本佔用你一點點內存,呵呵。
例三,使用批處理腳本查是否中冰河。腳本內容以下: 服務器
這裏利用了netstat命令,檢查全部的網絡端口狀態,只須要你清楚常見木馬所使用的端口,就能很easy的判斷出來是否
被人種了冰河。然這不是肯定的,由於冰河默認的端口7626,徹底能夠被人修改。這裏介紹的只是方法和思路。這裏介紹
的是方法和思路稍作改動,就變成能夠檢查其餘木馬的腳本了,再改動一下,加進去參數和端口及信息列表文件後,就變
成自動檢測全部木馬的腳本了。呵呵,是否是很過癮?腳本中還利用了組合命令&&和管道命令|,後面將詳細介紹。網絡
例四,借批處理自動清除系統垃圾,腳本以下: 工具
將以上腳本內容保存到autoexec.bat裏,每次開機時就把系統垃圾給自動刪除了。這裏須要注意兩點:1、DOS不支持長文件名,因此就出現了Tempor~1這個東東;2、可根據本身的實際狀況進行改動,使其符合本身的要求。
怎 麼樣,看到這裏,你對批處理腳本是否是已經有點興趣了?是否是發現本身已經慢慢愛上了這個東東?別高興的太早,愛不是一件簡單的事,它也許能帶給你快樂和 幸福,固然也能讓你痛苦的想去跳樓。若是你知道很難還敢繼續的話,I 服 了 YOU!繼續努力吧,也許到最後你不必定獲得真愛(真的有這可能,愛過的人都知道),但你能夠體會到整個愛的過程,就是如此。 酸、苦和辣,有沒有甜天知道。
爲何會把批處理和愛情扯上關係?不是我無聊,也不是由於這樣寫有趣多少,緣由有二:其一,批處理和愛情 有不少相同的地方,有些地方我用「專業」的行話解釋不清(我不懷疑本身的表達能力,而是事情自己就很差說清楚),說了=沒說,但用地球人都知道的愛情一比 喻(愛情是什麼?我**怎麼知道!!),沒準你內心一下就亮堂了,事半功倍,何樂而不爲?其二,我這段時間狀態不是很好,感冒發燒頭疼鼻塞,但主要仍是感 情上精神摧殘,搞的人煩透了,借寫教程之際感慨幾句,你們就全當買狗皮膏藥了,徹底能夠省略不看(也許還真有點效果----不至於讓你看着看着就睡着了, 把頭磕了來找我報銷醫藥費)。說不定下次的教程中你們還會看到楊過、張無忌等金老前輩筆下的英雄們。
看過第一章的朋友,必定對批處理有了初步的 印象,知道它究竟是用來幹什麼的了。但你知道運用批處理的精髓在哪裏嗎 ?其實很簡單:思路要靈活!沒有作不到的,只有想不到的。這和愛情就有點不一樣了,由於愛情的世界是兩我的的世界,一廂情願不叫愛情(補充:那叫單戀。廢 話!)而批處理倒是一我的的天堂,你能夠隨心所欲,沒有達不到的境界!
批處理看起來雜亂無章,但它的邏輯性之強,絕對不比其餘程序語言 (如彙編)低,若是你寫的腳本是一堆亂麻,雖然每一行命令都正確,但從頭執行到尾後,不必定獲得你想要的結果,也許是一屏幕的Bad command or fail name。這又和愛情有了共同點:按步驟來經營,缺乏或增多的步驟均可能致使不想看見的結果。陷入愛河的朋友,相信沒有不願定這句話的。個人愛情批處理, 輸出的結果不是Bad command or fail name,屏幕是這麼顯示的:‘你的愛情'不是內部或外部命令,也不是可運行的程序或批處理文件。而後就是光標不停閃動,等待這下一次錯誤的輸入。
從 這一章開始,將由淺入深的介紹批處理中經常使用的命令,不少常見DOS命令在批處理腳本中有這普遍的應用,它們是批處理腳本的BODY部分,但批處理比DOS 更靈活多樣,更具有自動化。要學好批處理,DOS必定要有比較紮實的基礎。這裏只講述一些比較少用(相對來講)的DOS命令,經常使用命令如COPY、DIR 等就不作介紹了(這些看似簡單的命令實際複雜的很,我怕本身都說不清楚!)。
例五,先看一個實例。這是一個頗有意思的腳本,一個小巧實 用的好東東,把批處理「自動化」的特色體現的淋漓盡致。先介紹一下這個腳本的來歷:你們都知道彙編程序(MASM)的上機過程,先要對源代碼進行彙編、連 接,而後再執行,而這中間有不少環節須要輸入不少東西,麻煩的很(只有經歷過的朋友才懂得)。如何使這個過程變的簡單呢?在咱們搞彙編課程設計時,我「被 逼」寫了這個腳本,用起來很爽,呵呵。看看腳本內容: 性能
先 不要被這一堆的東西給嚇怕了,靜下心來仔細的看(回想一下第一章中第一段是怎麼寫的!!)。已經給出了每一行命令的解釋,兩個冒號後面的內容爲前一行內容 解釋的E文(懼怕E文的朋友也不用擔憂,都很easy,一看就懂了,實在不懂了不會查詞典啊,這麼懶?),在腳本執行時不顯示,也不起任何做用。倒數第5 行行首有一個冒號,可不是筆誤哦!具體做用後面會詳細講到。此腳本中masm和link是彙編程序和鏈接程序,必須和edit程序以及你要編輯的源代碼 (固然還有這個腳本,廢話!)一塊兒在當前目錄中。使用這個批處理腳本,能夠最大可能的減小手工輸入,整個過程當中只須要按幾下回車鍵,便可實現從彙編源代碼 到可執行exe文件的自動化轉換,並具有智能判斷功能:若是彙編時源代碼出現錯誤(彙編不成功),則自動暫停顯示錯誤信息,並在按任意鍵後自動進入編輯源 代碼界面;若是源代碼彙編成功,則進行鏈接,並在鏈接後自動執行生成的exe文件。另外,因爲批處理命令的簡單性和靈活性,這個腳本還具有良好的可改進 性,簡單進行修改就能夠符合不一樣朋友的上機習慣。正在學彙編的朋友,必定別忘了實習一下!
在這個腳本中出現了以下幾個命令:@、echo、::、pause、:和goto、%以及if。而這一章就將講述這幾個命令。
一、@
這 個符號你們都不陌生,email的必備符號,它怎麼會跑到批處理中呢?呵呵,不是它的錯,批處理原本就離不開它,要不就不完美了。它的做用是讓執行窗口中 不顯示它後面這一行的命令自己(多麼繞口的一句話!)。呵呵,通俗一點說,行首有了它的話,這一行的命令就不顯示了。在例五中,首行的@echo off中,@的做用就是讓腳本在執行時不顯示後面的echo off部分。這下懂了吧?仍是不太懂?不要緊,看完echo命令簡介,天然就懂了。
二、echo
中 文爲「反饋」、「回顯」的意思。它實際上是一個開關命令,就是說它只有兩種狀態:打開和關閉。因而就有了echo on 和echo off兩個命令了。直接執行echo命令將顯示當前echo命令狀態(off或on)執行echo off將關閉回顯,它後面的全部命令都不顯示命令自己,只顯示執行後的結果,除非執行echo on命令。在例五中,首行的@命令和echo off命令聯合起來,達到了兩個目的:不顯示echo off命令自己,不顯示之後各行中的命令自己。的確是有點亂,但你要是練習一下的話,3分鐘包會,不會的退錢!
echo命令的另外一種用法一:能夠用它來顯示信息!如例五中倒數第二行,Default BAT file name is START.BAT將在腳本執行後的窗口中顯示,而echo命令自己不顯示(爲何??)。
echo命令的另外一種用法二:能夠直接編輯文本文件。
例六: 學習
以上腳本內容的編輯方法是,直接是命令行輸入,每行一回車。最後就會在當前目錄下生成一個a.bat的文件,直接執行就會獲得結果。
三、::
這個命令的做用很簡單,它是註釋命令,在批處理腳本中和rem命令等效。它後面的內容在執行時不顯示,也不起任何做用,由於它只是註釋,只是增長了腳本的可讀性,和C語言中的/*…………*/相似。地球人都能看懂,就很少說了。
四、pause
中 文爲「暫停」的意思(看看你的workman上),我一直認爲它是批處理中最簡單的一個命令,單純、實用。它的做用,是讓當前程序進程暫停一下,並顯示一 行信息:請按任意鍵繼續. . .。在例五中這個命令運用了兩次,第一次的做用是讓使用者看清楚程序信息,第二個是顯示錯誤的彙編代碼信息(其實不是它想顯示,而是masm程序在顯示錯 誤信息時被暫它停了,以便讓你看清楚你的源代碼錯在哪裏)。
五、:和goto
爲何要把這兩個命令聯合起來介紹?因 爲它們是分不開的,不管少了哪一個或多了哪一個都會出錯。goto是個跳轉命令,: 是一個標籤。當程序運行到goto時,將自動跳轉到:定義的部分去執行了(是否是分不開?)。例五中倒數第5行行首出現一個:,則程序在運行到goto時 就自動跳轉到:標籤訂義的部分執行,結果是顯示腳本usage(usage就是標籤名稱)。不難看出,goto命令就是根據這個冒號和標籤名稱來尋找它該 跳轉的地方,它們是一一對應的關係。goto命令也常常和if命令結合使用。至於這兩個命令具體用法,參照例五。
goto命令的另外一種用法一:提早結束程序。在程序中間使用goto命令跳轉到某一標籤,而這一標籤的內容卻定義爲退出。
如:
……
goto end
……
:end
這裏:end在腳本最後一行!其實這個例子很弱智,後面講了if命令和組合命令你就知道了。
六、%
這個百分號嚴格來講是算不上命令的,它只是批處理中的參數而已(多個%一塊兒使用的狀況除外,之後還將詳細介紹),但千萬別覺得它只是參數就小看了它(看看例五中有多少地方用到它?),少了它批處理的功能就減小了51%了。看看例
七: ui
以 上代碼是Bat.Worm.Muma病毒中的一部分,%1表明的IP,2%表明的username,3%表明password。執行形式爲:腳本文件名 參數一 參數二 ……。假設這個腳本被保存爲a.bat,則執行形式以下:a IP username password。這裏IP、username、password是三個參數,缺一不可(由於程序不能正確運行,並非由於少了參數語法就不對)這樣在腳 本執行過程當中,腳本就自動用用你的三個參數依次(記住,是依次!也是一一對應的關係。)代換1%、2%和3%,這樣就達到了靈活運用的目的(試想,若是在 腳本中直接把IP、username和password都定義死,那麼腳本的做用也就被固定了,但若是使用%的話,不一樣的參數能夠達到不一樣的目的,是否是 更靈活?)。
關於這個參數的使用,在後續章節中還將介紹。必定要很是熟練才行,這須要不少練習過程,須要下點狠工夫!
這 一章就寫到這裏了。可能有朋友問了:怎麼沒介紹if命令?呵呵,不是我忘了,而是它不容易說清楚,下一章再講了!這一章講的這點東西,若是你是初學者,恐 怕也夠消化的了。記住一句話:DOS是批處理的BODY,任何一個DOS命令均可以被用在批處理腳本中去完成特定的功能。到這裏,你是否已經想到了用本身 肚子裏的東西去寫點帶有自動化色彩的東東呢
?很簡單,就是一個DOS命令的集合而已,相信自稱爲天才的你已經會把計算機等級考試上機試題中的DOS部分用批處理來自動化完成了。
煩! 就好象一個半老女人到了更年期,什麼事都想嘮叨幾句,什麼事都感到不舒服,看誰誰不爽。明知山有虎,偏向虎山行,最後留下一身傷痕無功而返時,才發現本身 居然如此脆弱,如此眇小,如此不堪一擊。徘徊在崩潰的邊緣,忽然回想起了本身最後一次扁人的那一刻,還真有點懷念(其實我很不喜歡扁人,更不喜歡被人 扁)。我須要發泄,我用手指拼命的敲打着鍵盤,在一陣接一陣有節奏的聲音中,屏幕上出現了上面的這些文字。可難道這就是發泄的另外一種方式嗎?中國人仍是厲 害,早在幾千年前孔老夫子就說過「惟女子與小人,難養也」,真**有先見之明,佩服!雖然是在發泄,不過你們請放心,以個人脾氣,既然決定寫這篇教程,就 必定會盡力去寫好,寫完美,絕對不給本身留下遺憾,要不這教程就不是我寫的!
曾經有一篇經典的批處理教程出如今你的屏幕上,你沒有保存,直到找 不到它的連接你才後悔莫及,人世間最大的痛苦莫過於此。若是上天能給你一個再看一次的機會,你會對那篇教程說三個字:我愛你!若是非要給這份愛加上一個期 限,你但願是100年。由於100年後,你恐怕早已經掛了!而如今,你的屏幕上出現了這篇你正在看的批處理教程,雖然不如你曾經看的那篇經典,但若是勉強 還過的去。你會愛它嗎?時間會有50年那麼長嗎?答案是:試試看吧。
批處理腳本中最重要的幾個命令,將在這一章詳細介紹,可是很遺憾, 有些細節到如今我都沒掌握的很好,甚至還有些生分。如同還不太懂得愛同樣。但我一直都在努力,即便一直都沒有收穫。因此可能講的會比較籠統,但我會告訴你 方法,剩下的就是時間問題了,須要本身去磨練。讓咱們共同努力吧。冰凍三尺非一日之寒,滴水穿石非一日之功。有些事情,好比學批處理,好比愛一我的,都是 不能速成的,甚至還會有付出艱辛而收穫爲甚微的狀況。再次重申,看這篇教程的時候,必定要靜下心來,除非你已經掌握了這篇教程的全部東西----但那也就 沒必要看了,浪費時間!
七、if
接上一章,接着講if命令。總的來講,if命令是一個表示判斷的命令,根據得出的每個結果,它均可以對應一個相應的好啊做。關於它的三種用法,在這裏分開講。
(1)、輸入判斷。仍是用例五里面的那幾句吧: 編碼
這 裏判斷輸入的參數狀況,若是參數爲空(無參數),則跳轉到usage;若是參數爲/?或help時(你們通常看一個命令的幫助,是否是輸入的/?或 help呢,這裏這麼作只是爲了讓這個腳本看起來更像一個真正的程序),也跳轉到usage。這裏還能夠用否認形式來表示「不等於」,例如:if not "%1"=="" goto usage,則表示若是輸入參數不爲空就跳轉到usage(實際中這樣作就沒意義了,這裏介紹用法,管不了那麼多了,呵呵。)是否是很簡單?其實翻譯成中 文體會一下就understand了。
(2)、存在判斷。再看例二里這句:
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
如 果存在那些gif文件,就刪除這些文件。固然還有例四,都是同樣的道理。注意,這裏的條件判斷是判斷存在的,固然也能夠判斷不存在的,例以下面這句「若是 不存在那些gif文件則退出腳本」:if not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多一個not來表示否認而已。
(3)、結果判斷。仍是拿例五開刀(沒想到本身寫的腳本,居然用處這麼大,呵呵): spa
先 對源代碼進行彙編,若是失敗則暫停顯示錯誤信息,並在按任意鍵後自動進入編輯界面;不然用link程序鏈接生成的obj文件。這裏只介紹一下和if命令有 關的地方,&命令後面會講到。這種用法是先判斷前一個命令執行後的返回碼(也叫錯誤碼,DOS程序在運行完後都有返回碼),若是和定義的錯誤碼符 合(這裏定義的錯誤碼爲1),則執行相應的好啊做( 這裏相應的好啊做爲pause & edit %1.asm部分)。
另外,和其餘兩種用法同樣,這種用法也能夠表示否認。用否認的形式仍表達上面三句的意思,代碼變爲:
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
看 到本質了吧?其實只是把結果判斷後所執行的命令互換了一下,「if not errorlevel 1」和「if errorlevel 0」的效果是等效的,都表示上一句masm命令執行成功(由於它是錯誤判斷,並且返回碼爲0,0就表示否認,就是說這個錯誤不存在,就是說masm執行成 功)。這裏是否加not,錯誤碼到底用0仍是1,是值得考慮的兩個問題,一旦搭配不成功腳本就確定出錯,因此必定要體會的很深入才行。如何體會的深入?練 習!本身寫一個腳本,而後把有not和沒有not的狀況,返回碼爲0或1的狀況分別寫進去執行(怎麼,嫌麻煩啊?排列組合算一下才四中狀況你就嫌麻煩了? 後面介紹管道命令和組合命令時還有更麻煩的呢!怕了?呵呵。),這樣從執行的結果中就能很清楚的看出這兩種狀況的區別。
這種用errorlevel結果判斷的用法是if命令最難的用法,但也偏偏是最有用的用法,若是你不會用errorlevel來判斷返回碼,則要達到相同的效果,必須用else來表示「不然」的好啊做,是比較麻煩的。以上代碼必須變成:
masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm
關 於if命令的這三種用法就say到這裏,理解很簡單,但應用時就不必定用的那麼駕輕就熟,主要是熟練程度的問題。可能有的朋友有點驚訝,我怎麼沒給出相似 下面三行的用法介紹,是由於下面三行是if命令幫助裏對它自身用法的解釋,任何人只要一個「if /?」就能看到,我沒有必要在這裏多費口舌;更重要的緣由,是我以爲這樣介紹的不清楚,看的人不必定看的懂,因此我採用上面本身對if命令的理解來介紹。 必定要注意的是,這三種用法的格式各不相同,並且也是不能改變的,但實際上能夠互換(覺得從本質上講,這三種用法都是創建在判斷的基礎上的,哲學教咱們學 會透過現象看事物
本質!)。有興趣的朋友能夠本身研究一下。
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
八、call
學過彙編或C的朋友,確定都知道call指令表示什麼意思了,在這裏它的意思其實也是同樣的。在批處理腳本中,call命令用來從一個批處理腳本中調用另外一個批處理腳本。看例八(默認的三個腳本文件名分別爲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
有 沒有看出什麼不對的地方?沒看出來啊?沒看出來就對了,其實就沒有不對的地方嘛,你怎麼看的出來!從上面兩個腳本,你能夠獲得以下信息:一、腳本調用能夠 靈活運用,循環運用、重複運用。二、腳本調用能夠使用參數!關於第一點就很少說了,聰明的你一看就應該會,這裏說一下第二點。
在 start.bat中,10.bat後面跟了參數0,在執行時的效果,其實就是把10.bat裏的參數%1用0代替。在start.bat 中,ipc.bat後面跟了參數ipcfind.txt(一個文件,也能夠作參數),執行時的效果,就是用ipc.bat中的每一行的三個變量 (這裏不懂不要緊,學過for命令後就懂了),對應代換ipc.bat中的%%i、%%j和%%k。這裏參數調用是很是靈活的,使用時須要好好體會。在初 學期間,能夠先學習只調用腳本,至於連腳本的參數一塊兒使用的狀況,在後面的學習中天然就會有
比較深入的理解,這是由於當你已經能夠靈活運用批處 理腳本後,如何使代碼寫的更精簡更完美更高效就天然包括到了考慮的範圍,這時候你就會發如今調用腳本時直接加入參數,能夠使代碼效率加倍。By the way,上面的這幾個腳本,都是Bat.Worm.Muma病毒的一部分,在後面的教程裏,你們將有機會見到這個病毒的真面目。
那是否是說,在同一個目錄下至少存在兩個批處理腳本文件(只有一個你調用誰?)?呵呵,注意了,這句話錯了!!只有一個照樣能夠調用----調用自身!看例九(默認腳本文件名a.bat):
net send %1 This is a call example.
call a.bat
這 兩句一結合,效果天然不怎麼樣,由於只有一臺機器來發消息,誰怕誰啊?我給你來個禮尚往來!可若是有100臺機器同時執行,並且每臺機器開10和窗口同時 向一個目標機器發消息的話,呵呵。這裏call a.bat的做用就是調用自身,執行完前一句net send命令後再調用自身,達到了循環執行的目的。
給出一個頗有意思的腳本,有興趣的朋友能夠實驗一下。例十(默認腳本文件名爲a.bat):
call a.bat
一 定要在DOS窗口下執行,不然只會看到一個窗口一閃而過,看不到最後結果。等執行完後,當腳本被執行了1260次,別忘了想一下究竟是爲何!愛情有時候 跟這個腳本同樣,一旦陷入死循環,最後的結果都是意想不到的。只是愛情,絕對不會等到被毫無理由的循環這麼屢次,也許在第三次時就出現了love is aborted的提示。
九、find
這是一個搜索命令,用來在文件中搜索特定字符串,一般也做爲條件判斷的鋪墊程序(我怎麼忽然想起了這四個字?)。
這個命令單獨使用的狀況在批處理中是比較少見的,由於沒什麼實際意義。仍是借例三來講明:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit
先 用netstat命令檢查是否有冰河默認的端口7626在活動,並把結果保存到a.txt中。而後使用type命令列出a.txt中的內容,再在列出的內 容中搜索字符串「7626」 ,發現有的話則提示中了冰河,不然退出。看,find命令其實就這麼簡單,但有一點必需要注意到:若是不使用type命令列出a.txt中的內容,而是直 接使用find命令在a.txt中找「7626」(find a.txt "7626" && echo "Congratulations! You have infected GLACIER!"),就必須得給出這個a.txt的絕對路徑(我試過了,find並無默認路徑就是當前路徑的功能,必須手動指定。也許是我錯了,歡迎 指正)。由於在find命令的幫助裏有這麼一句話:若是沒有指定路徑,find將搜索鍵入的或者由另外一個命令產生的文字。這裏的「另外一個命令」天然就指的 type命令了。
至於find命令的其餘幾個參數如v、n、i等,有興趣的朋友本身去研究吧,這已經屬於DOS學習的內容了,這裏就不作介紹。關於find命令和其餘命令的一些更精妙的用法(有些簡直使人叫絕),後續的教程中將介紹,但願關注。
十、for、set、shift
爲 什麼把這三個命令放到一塊兒來說?緣由除了我說明外,恐怕誰也想不到!很簡單的一句話:其實我也不太懂!是的,對於這兩個命令,我是從研究 Bat.Worm.Muma病毒開始學習的,時間過去了很多,但仍是沒徹底搞明白,我怕講出來連本身都看不懂,我更怕不當心講錯了成了罪人。因此我給出一 個腳本去告訴你,如何讓這兩個命令給本身留一個初步的印象,其實也就是這兩個命令的入門,而並非說如何領會這兩個命令。由於要領會如此精妙的兩個命令 (特別是for)談何容易!也許你會表揚我說我誠實、不懂就不懂;也許你會罵我,讓我既然不懂就趕忙滾蛋,不要在這裏丟人顯眼;也許你還會說一些別的這樣 那樣好聽或很差聽的話,都隨便你了,即便我不一樣意你說的話,我也會誓死捍衛你說話的權利。看例十
一:
執 行後在當前路徑下就生成for.txt、set.txt和shift.txt三個文件,裏面分別記錄了for命令、set命令和shift命令的幫助信 息。地球人都能看懂,我就很少說了。我在網上曾經找了很長時間這三個命令的教程,但都不理想,基本都是照搬的幫助信息。我想在本身徹底掌握了這兩個命令 後,必定要寫一篇用本身的文字總結出來的for、set和shift教程(關於shift命令,後面介紹批處理的參數時還將涉及到),必定會的,這是個人 心願之一!須要注意的一點是,這三個命令的幫助裏 ,介紹的都比較死板,雖然也舉了一些例子,但這是遠遠不夠的。要掌握這兩個命令,最須要的就是耐心!沒寫錯,就是耐心。光是認真看完它們的幫助文字就已經 須要足夠的耐心了,要進一步練習領會這兩個命令,難道不須要更大的耐心?實戰練習的機會我會留給你的,關鍵仍是那句話,看你有沒有耐心去研究了。看看例十
二:
START.BAT:
CALL MUMA.BAT
這 是Bat.Worm.Muma病毒的起始腳本,設置了病毒運行的環境變量。是否是看的頭都大了?又忘了寫在第一章第一段的那句話(靜下心來!),你應該能 體會到學習這兩個命令所須要的耐心了吧。就如同去愛一我的,你得學會寬容,打不得罵不得,用你寬大的胸懷去包容她的一切,即便你發現愛她的過程如看上面代 碼的過程同樣讓你頭大,但你仍是得愛下去-
---愛須要理由嗎?不須要嗎?須要嗎?不須要嗎……等到風平浪靜後,最直觀的收穫就是,你的耐心變的史無前例的充足,面對她的複雜和藹變,你本身會處變不驚,以本身的方式去從容應付曾經應付不了的場面,即便到最後一身傷痕,也會感慨曾經的舉動有多麼偉大。
沒錯,這就是批處理的魅力,這就是愛的魅力。讓你受了傷還感謝傷你的人。這種感受就好象在本身最喜歡的音樂聲中被人強姦,痛並快樂着。
不 得再也不次重申一遍,各類DOS命令是批處理的BODY(我實在找不出一個更合適的詞來形容他們之間的關係),學好DOS命令是學好批處理的前提。其餘 DOS命令如copy、dir、del、type、path、break、start等內部命令,以及ping、net、cmd、at、sort、 attrib、fc、find等外部命令,在批處理裏的應用很是普遍。這篇教程的做用,是教你認識批處理,以及如何利用DOS命令組合出來一個完美的批處 理腳本,去讓它自動完成你想要它作的事情。而靈活自如的編輯一個批處理腳本是創建在熟練掌握DOS命令的基礎上的,這已經超出了本文的範疇,在此就不贅述 了。
不知不覺中第三章已經結束了。耳麥裏傳來的依然是陳曉東的《比我幸福》,每隔4分32秒就自動重播。雖然我不併不很喜歡陳曉東,可 這並不妨礙我喜歡音樂,喜歡這首描寫的如此讓人感慨的歌。請你必定要比我幸福/纔不枉費我狼狽退出/再痛也不說苦/愛不用抱歉來彌補/至少我能成全你的追 逐/請記得你要比我幸福/才值得我對本身殘酷/我默默的倒數/最後再把你看清楚/看你眼裏的我好饃糊/慢慢被放逐。我如同一個因年老失色而拉不到客的老妓 女,絕望的徘徊在曾經輝煌的紅燈區,用一臉的木然瞟一眼來來去去的人羣,默默的回憶本身並不光彩的過去,幻想本身將要面對的將來。直到看見那些幸福依偎在 一塊兒的情侶們,才忽然間發現上帝的公平,和這種公平的殘忍。
能夠說,批處理腳本中最重要的幾個命令我都沒有給出如echo或if那樣比較詳細的 介紹,緣由我已經說了,由於我也是個菜,我也不太懂----但我正在學!你呢?今天又去了一趟圖書館,淘金同樣發現了一本叫《DOS批文件》的東東,藏在 一個角落裏落滿了灰,五本摞一塊兒就跟磚頭同樣厚了。大概翻了一下,裏面介紹了不少比較底層和基礎的東西,雖然從思路上講,已經有點time out了,不少東西已經基本沒有利用的價值(這就是信息時代的更新速度),但仍是很值得看的。因而打算下午淘過來,放假回去了再好好研究一番,連同那幾個 不熟悉的命令一塊兒搞熟了,再續寫這篇教程。我始終堅信,沒有最好只有更好。
可是很惋惜,等到下午再去的時候,圖書館樓梯口已經立了一個 牌子,上面寫着out of service----人家這學期的工做結束了。因而回到宿舍打算繼續寫第四章,正在這時又獲得一個「振奮人心」的消息:期末考試有一科掛了,並且是全班 第一----這一門整個班裏就掛了我一個。鬱悶的情緒剎那間涌上心頭,整個世界彷彿都變成黑的了。食堂和小賣部已經陸續關門,學校裏的人愈來愈少,迎面過 來的幾個同窗也都一身行李,忙碌着準備回家過年,心裏的孤寂和失落如同夏日裏暴雨前的烏雲,迅速而不可抗拒的佔領了內心每個角落。迎着一月的冷風我一個 人在天橋上發呆,還能怎麼樣,連期末考試都應付不了的失敗男人。
「課間休息」時間好象長了點,呵呵,上課了!從這一章開始,將詳細介紹 批處理中經常使用的幾個組合命令和管道命令。這些命令雖然不是必須的,如同愛一我的時不必定非得天天去陪,但若是少了這個過程,事情就會變的複雜而不完美,所 以我認爲管道命令和組合命令是批處理的調味劑,幾乎是少不了的。
下面從管道命令講起。經常使用的管道命令有如下這些:|、>、>>
十一、|
這 個命令恐怕你們不是很陌生,常常好啊做DOS的朋友都應該知道,當咱們查看一個命令的幫助時,若是幫助信息比較長,一屏幕顯示不完時DOS並不給咱們時間 讓咱們看完一屏幕再翻到另外一屏幕,而是直接顯示到幫助信息的最後。如在提示符下輸入help回車時,就會看到當前DOS版本所支持的全部非隱含命令,但你 只能看到最後的那些命令,前面的早就一閃
而過了,如何解決這個問題?看例十三:
help | more
回車後會發現顯示滿一屏幕後就自動暫停,等候繼續顯示其餘信息。當按寫回車時,變成一個一個的出現;按下空格鍵時一屏幕一屏幕顯示,直到所有顯示完爲止;按其餘鍵自動中止返回DOS。
爲何會出現上述現象?答案很簡單,這裏結合了管道命令|和DOS命令more來共同達到目的的。這裏先簡單介紹一下help命令和more命令,對理解|命令的用法有很大幫助。
11.一、 help命令。其實這個命令是不須要多說的,但在上述例子中help命令的用法比較特殊,直接在DOS提示符下輸入help命令,結果是讓DOS顯示其所 支持的全部非隱含命令,而在其餘地方用help命令,如輸入net help回車,則是顯示net命令的幫助信息。
11.二、more 命令。可能不少朋友之前就沒有接觸過這個命令,這個命令在Linux下的用處很是普遍,也是管道命令之一。你們能夠找一篇比較長的文章(a.txt)在 DOS提示符下輸入以下兩個命令去比較一下差異:more a.txt和type a.txt。利用more命令,能夠達到逐屏或逐行顯示輸出的效果,而type命令只能一次把輸出顯示完,最後的結果就是隻能看到末尾的部分。在例十三 裏,more命令的做用就是讓輸出的信息逐屏或逐行顯示。
看到這裏,你是否已經能隱約感覺到了|命令的做用了?沒錯,它的做用,就是把前一命令 的輸出當後一命令的輸入來用的。在例十三裏,前一命令的輸出,就是help命令執行後顯示的DOS所支持的全部非隱含命令,而這個結果恰好作了後一命令 more的輸入。因此例十三和下面的例十四是等效的:
help > a.txt
more a.txt
del a.txt
這裏利用另外一管道命令>生成了一個a.txt文件做爲中間環節,在用more命令查看a.txt文件後再刪除a.txt文件(例十三的全部好啊做是在內存中進行的,不生成文件)。能夠看出,正確使用管道命令|能夠帶來事半功倍的效果。
結合例十三和例十四,以及前面的例九再體會一遍:|命令的做用,就是讓前一命令的輸出當作後一命令的輸入。
十二、>、>>
這 兩個命令的效果從本質上來講都是同樣的,他們都是輸出重定向命令,說的通俗一點,就是把前面命令的輸出寫入到一個文件中。這兩個命令的惟一區別 是,>會清除掉原有文件中的內容後把新的內容寫入原文件,而>>只會另起一行追加新的內容到原文件中,而不會改動其中的原有內容。例十 五:
依次在DOS提示符下輸入以上各行命令,一行一個回車,將在當前目錄下生成一個a.bat文件,裏面的內容以下:
看 到這裏,你獲得了多少信息?一、能夠直接在DOS提示符下利用echo命令的寫入功能編輯一個文本,而不須要專門的文本編輯工具;二、管道命令> 和>>的區別如上所述。若是這裏只用>命令來完成上面好啊做,最後也會生成一個a.bat,但裏面的內容就只剩下最後一行exit了。 因此>和>>通常都聯合起來用,除非你重定向的輸出只有一行,那麼就能夠只用>了。結合例一再仔細體會輸出重定向管道命 令>和>>的用法。
1三、<、>&、<&
這三個命令也是管道命令,但它們通常不經常使用,你只須要知道一下就ok了,固然若是想仔細研究的話,能夠本身查一下資料。
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
>&,將一個句柄的輸出寫入到另外一個句柄的輸入中。
<&,恰好和>&相反,從一個句柄讀取輸入並將其寫入到另外一個句柄輸出中。
關於這三個管道命令的舉例,在後面批處理腳本的精妙應用中還將涉及到。
下面介紹組合命令:&、&&、||
組 合命令,顧名思義,就是能夠把多個命令組合起來當一個命令來執行。這在批處理腳本里是容許的,並且用的很是普遍。它的格式很簡單----既然如今已經成了 一個文件了,那麼這多個命令就要用這些組合命令鏈接起來放在同一行----由於批處理認行不認命令數目。組合命令的做用,就如同給愛人陪不是,說一句是 說,說十句也是說,不一次把好話都說了出來,效果可能會好些----固然得排除一種特殊狀況:這些話是否有前後順序,有些話是否能夠同時說。在批處理腳本 裏也同樣,有些時候某些命令是不能同時執行的,後面給你說。
剛剛又送走了一個同窗,人去樓空的感受愈來愈明顯,望着空蕩蕩的牀鋪,平日 裏喧鬧的宿舍就只剩下我一我的了,整個世界只有那個平時使人很是討厭的老鼠這時候才顯得可愛起來----只有它會陪着我在這不敢開燈的漆黑夜裏----一 個連期末考試都應付不了的失敗男人。失敗!我感到快要呼吸不過來,這種失敗的壓力簡直令我窒息,簡直讓個人手接收不到大腦的信號,簡直讓這篇未完成的教程 夭折。但我能怪誰?
忙碌了一學期要過年了卻掛了科,失敗;掛了科也倒罷了,居然一我的拖全班的後退,失敗中的失敗;更失敗的,是在這最 失落的時候,居然找不到一我的能夠傾訴;然而最失敗的,是忽然發現本身居然如此脆弱,如此耐不住寂寞。不過這倒也解開了心中疑惑好久的一個問題:爲何明 知道那段情是一個旋渦卻還心甘情願的往裏面跳----這就是青春,風同樣的年齡,火同樣不安的心。再也不愛了,我不要再一我的的時候苦苦等待;再也不愛了,我 不要在你給的囚籠裏憐憫的愛;再也不愛了,我不要在別人的視線裏如此好笑;再也不愛,我再也不愛。就算塌下來,我也要一我的扛着,頭不能低腰不能彎,不能喘息不 能傾訴,由於雖然失敗,但仍是男人,是男人就不能向困難低頭!
1四、&
這能夠說是最簡單的一個組合命令了,它的做用是用來鏈接n個DOS命令,並把這些命令按順序執行,而無論是否有命令執行失敗。例十六:
copy a.txt b.txt /y & del a.txt
其實這句和move a.txt b.txt的效果是同樣的,只不過前者是分了兩步來進行的(在後面還將涉及到具體使用哪一種方法的問題)。這個命令很簡單,就很少費口舌了,惟一須要注意的一點是,這裏&兩邊的命令是有執行順序的,從前日後執行 。
1五、&&
切記,這裏介紹的幾個命令都是組合命令,因此他們先後都必須都有其餘命令(要不如何組合?)。這個命令也不 例外,它能夠把它先後兩個命令組合起來當一個命令來用,與&命令不一樣之處在於,它在從前日後依次執行被它鏈接的幾個命令時會自動判斷是否有某個命 令執行出錯,一旦發現出錯後將不繼續執行後面剩下的命令。這就爲咱們自動化完成一些任務提供了方便。例十七:
dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www
若是遠程主機存在user.mdb,則copy到本地e:\backup\www,若是不存在固然就不執行copy了。這句對搞網管的朋友是否有點用呢?呵呵。其實它和下面這句的做用是同樣的:
if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www
至於你喜歡用哪一個就隨便了,我沒辦法判斷dir和if兩個命令哪個執行效率更高,因此不知道用哪一個更好,呵呵。
你 是否還記得「有些命令是不能同時執行的」?你是否相信這句話?固然得相信,不信就給你出道題:把C盤和D盤的文件和文件夾列出到a.txt文件中。你將如 何來搞定這道題?有朋友說,這還不是很easy的問題嗎?同時執行兩個dir,而後把獲得的結果>到a.txt裏就ok了嘛,看例十八:
dir c:\ && dir d:\ > a.txt
仔 細研究一下這句執行後的結果,看看是否能達到題目的要求!錯了!這樣執行後a.txt裏只有D盤的信息!爲何?就由於這裏&&命令 和>命令不能同時出現一個句子裏(批處理把一行當作一個句子)!!組合命令&&的優先級沒有管道命令>的優先級高(本身總結 的,不妥的地方請指正)!因此這句在執行時將本分紅這兩部分:dir c:\和dir d:\ > a.txt,而並非如你想的這兩部分:dir c:\ && dir d:\和> a.txt。要使用組合命令&&達到題目的要求,必須得這麼寫:
dir c:\ > a.txt && dir d:\ >> a.txt
這樣,依據優先級高低,DOS將把這句話分紅如下兩部分:dir c:\ > a.txt和dir d:\ >> a.txt。例十八中的幾句的差異比較特殊,值得好好研究體會一下。
固然這裏還能夠利用&命令(本身想一下道理哦):
dir c:\ > a.txt & dir d:\ >> a.txt
1六、||
這個命令的用法和&&幾乎同樣,但做用恰好和它相反:利用這種方法在執行多條命令時,當遇到一個執行正確的命令就退出此命令組合,再也不繼續執行下面的命令。題目:查看當前目錄下是否有以s開頭的exe文件,若是有則退出。例十九:
@echo off
dir s*.exe || exit
其 實這個例子是有破綻的,你看出來了嗎?其實很簡單,本身試試就知道了嘛:若是存在那個exe文件,就退出;若是不存在那個exe文件,也退出!爲何?因 爲若是不存在那個.exe文件,則前一條命令dir s*.exe執行確定是不成功的,因此就繼續執行exit,天然就退出了,呵呵。那麼如何解決題目給出的問題呢?看例二十:
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
這樣執行的結果,就能達到題目的要求,是否存在s*.exe將出現兩種結果。這裏加暫停的意思,固然是讓你能看到echo輸出的內容,不然一閃而過的窗口,echo就白寫了。
給出兩個更好研究優先級(同時也是更難理解)的腳本,仔細研究它們的區別,以便完全理解各類命令的優先級順序,對之後本身利用這些命令寫腳本有很大的好處----不會出錯!OK,請看例二十一和例二十二:
例二十一:
@echo off
dir a.ttt /a & dir a.txt || exit
例二十二:
@echo off
dir a.ttt /a && dir a.txt || exit
警告:患有心腦血管病的朋友請不要研究以上兩例,不然輕者頭大如鬥,重者血管爆裂。任何人因爲研究這兩個腳本的區別而形成的任何事故由本身或其合法監護人負責,與本人和本論壇無關。特此警告!
有 關管道命令和組合命令就大概介紹到這裏了,不知道聰明的你是否理解?呵呵,能理解就整天才了,除非你之前就已經掌握!千萬別小看了這幾個鬼命令,大棒槌是 個人說,簡直就不是人學的東西!但我仍是靜下心來研究了一番,最後得出的結論如上所述,已經一點不剩的交給你了,但願你好好收藏並消化吸取,固然有錯誤被 你發現了,或者不完整的地方被你看出來了,請趕忙告訴我一聲!
這幾個命令真的把個人頭都搞大了。在網上有一篇流傳很廣的批處理教程: 「簡明批處理教程」,雖說的比較全面,但看起來很不過癮。在對for等命令介紹時就一個for /? > a.txt & start a.txt完事了(固然這一點上我不能說人傢什麼,畢竟我連for /?都沒給出),而對上述管道命令和組合命令、以及這篇教程之後將講到的用批處理好啊做註冊表等方面根本沒有介紹。我之因此花整整一章來說管道命令和組合 命令,是由於他們纔是批處理的精華和靈魂,可否正確利用好這幾個命令,是可否掌握批處理的前提條件。如for、set等DOS命令的問題,能夠從DOS的 角度出發專門有針對性的學習,但有關這幾個命令的問題,倒是不容易精通掌握的----他們之間的關係太複雜了!
將下列代碼存爲bat文件
一、若是用字典破解:pass.bat 字典文件路徑及名稱 主機 用戶名
二、若是用數字破解:pass.bat 起始數 步長 結束數 主機 用戶名
密碼破解出來以後,存放於c:\pass.txt文件裏面。
將下列代碼存爲pass.bat文件
For
對一組文件中的每一個文件運行指定的命令。
能夠在批處理程序中或直接從命令提示符使用 for 命令。
要在批處理程序中使用 for 命令,請使用如下語法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,請使用如下語法:
for %variable in (set) do command [command-parameters]
參數
%%variable 或 %variable
代 表可替換的參數。for 命令使用在 set 中指定的每一個文本字符串替換 %%variable(或 %variable),直到此命令(在command-parameters 中指定)處理全部的文件爲止。使用 %% variable 在批處理程序中執行 for 命令。使用 %
variable 經過命令提示符執行 for 命令。變量名區分大小寫。
(set)
指定要用指定的命令處理的一個或多個文件或文本字符串。須要括號。
command
指定要在指定的 set 所包含的每一個文件上執行的命令。
command-parameters
指定要用於指定命令(若是指定的命令要使用任何參數或開關)的任何參數或開關。
若是啓用了命令擴展(Windows 2000 中的默認設置),將支持 for 命令的其餘形式。
For 命令的其餘形式
若是啓用了命令擴展,將支持以下 for 命令的其餘格式:
只限於目錄
for /D [%% | %]variable in (set) docommand [command-parameters]
若是 set 包含通配符(* 和 ?),則指定與目錄名匹配,而不是文件名。
遞歸
for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
進入根目錄樹[drive:]path,在樹的每一個目錄中執行 for 語句。若是在 /R 後沒有指定目錄,則假定爲當前目錄。若是
set 只是一個句號 (.) 字符,則只列舉目錄樹。
迭代
for /L [%% | %]variable in (start,step,end) do command [command-parameters]
集合是一系列按步長量劃分的、從頭至尾的數字。這樣,(1,1,5) 將生成序列 1 2 3 4 5,而 (5,-1,1) 將生成序列 (5
4 3 2 1)。
文件解析
for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]variable in ("literal string") do command[command-parameters]
for /F ["options"] [%% | %]variable in ('command') do command [command-parameters]
或者,若是出現 usebackq 選項:
for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]variable in ('literal string') do command [command-parameters]
for /F ["options"] [%% | %]variable in (`command`) docommand [command-parameters]
filenameset 參數指定一個或多個文件名稱。在繼續到 filenameset 中的下一個文件以前,每一個文件都會被打開、讀取和處理。
過程由讀取文件、分紅獨立的文本行及而後將每行解析成零個或更多個令牌組成。而後使用設置爲找到的一個或多個令牌字符串的變量值(或多個值)集合調用 for 循環體。默認狀況下,/F 傳遞每一個文件每一行的第一個空白分隔符號。
跳過空行。經過指定可選的「options」參數能夠覆蓋默認的解析行爲。這是一個引用字符串,它包含一個或多個關鍵字
以指定不一樣的解析選項。關鍵字是:
關鍵字 說明
eol=c 指定行尾註釋字符(只一個字符)
skip=n 指定在文件的開頭跳過的行數。
delims=xxx 指定定界符集合。這將替換空格和製表符的默認分隔符集。
tokens=x,y,m-n 指定將令牌從每行傳遞到每一個反覆的正文。這將致使分配其餘變量名。m-n 格式是一個範圍,指定從mth 到 nth 的令牌。若是在令牌 = 字符串中最後一個字符是星號,則將分配附加的變量,並在解析最後一個令牌後在行
上接收剩餘的文本。
usebackq 指定將右引號字符串做爲命令執行,單引號字符串是文字字符串命令,您能夠使用雙引號包括 filenameset 中的文件名。
變量替換
此外,已經加強了 for 變量引用的替換修改程序。如今能夠使用下列可選的語法(對於任何變量 I): 變量(使用修改程序) 說明 %~I 展開刪除了周圍的任何引號 (") 的 %I %~fI 將 %I 展開到徹底合格的路徑名 %~dI 只將 %I 展開到驅動器號 %~pI 只將 %I 展開到路徑 %~nI 只將 %I 展開到文件名 %~xI 只將 %I 展開到文件擴展名 %~sI 展開路徑以只包含短名稱 %~aI 將 %I 展開到文件的文件屬性 %~tI 將 %I 展開到文件的日期/時間 %~zI 將 %I 展開到文件大小 %~$PATH:I 搜索 PATH 環境變量所列出的目錄,並將 %I 展開開到第一個找到結果的所有合格名稱。若是沒有定義環境變量名,或搜索後沒有找到文件,則此修改程序將擴展爲空字符串。 修改程序能夠合併以得到複雜的結果: 變量(使用合併的修改程序) 說明 %~dpI 只將 %I 展開到驅動器號和路徑 %~nxI 只將 %I 展開到文件名和擴展名 %~fsI 將 %I 展開到只包含短名稱的完整路徑名 %~dp$PATH:I 在 PATH 環境變量所列出的目錄中搜索 %I,並展開到第一個找到結果的驅動器號和路徑 %~ftzaI 將 %I 擴展到與 dir 類似的輸出行 注意 在上述範例中,%I 和 PATH 可被其餘有效值替換。經過有效的 for 變量名終止 %~ 語法。 使用大寫變量名(例如 %I)能夠使代碼更具可讀性,而且避免與不區分大小寫的修改程序混淆。 Shift 更改批處理文件中可替換參數的位置。 shift 啓用命令擴展(Windows 2000 中的默認設置)後,shift 命令支持 /n 開關,該開關通知命令在第 n 個參數處開始更改,n 能夠是從 0 到 8 的任何一個值。例如, SHIFT /2 將 %3 改成 %2,將 %4 改成 %3 等等,而 %0 和 %1 保持不變。 篩選器命令 篩選器命令能夠幫助您排序、查看和選擇部分命令輸出結果。 經過篩選器命令傳遞信息 篩選器命令能夠劃分、重排以及提取經過的部分信息好啊做。Windows 2000 有三個篩選器命令: more 命令每次顯示一屏文件內容或命令輸出。 find 命令在文件和命令輸出中搜索指定字符。 sort 命令按字母順序排列文件和命令輸出。 要將輸入從文件發送到篩選器命令,請使用小於符號 (<)。若是要篩選器命令從其餘命令得到輸入,請使用管道 (|)。 使用 more 命令來控制屏幕顯示 more 命令每次一屏地顯示文件的內容或命令輸出。例如,下面的 more 命令每次顯示一屏 List.txt 文件的內容: more < list.txt 信息顯示一屏後,會出現字「More」。要繼續顯示下一屏,請按鍵盤上任意鍵。要中止命令且不查看詳細信息,請按CTRL+C 鍵。 若是使用產生多屏輸出的命令,more 將十分有用。例如,假設定要查看硬盤的目錄樹。若是 Windows 2000 不能將目錄在一屏內所有顯示出來,請使用帶管道號 (|) 和 more 命令的 tree 命令,以下例所示: tree c:\ | more tree 命令的第一屏輸出被顯示,後跟詞「More」。Windows 2000 暫停,直到用戶按鍵盤上的任意鍵爲止(PAUSE 鍵除外)。 使用 find 命令搜索文本 find 命令在一個或多個文件中搜索指定文本。Windows 2000 顯示每一個包含該文本的行。find 命令能夠用做篩選器命令或者標準的 Windows 2000 命令。有關將 find 用做標準的 Windows 2000 命令的信息,請單擊「相關主題」列表中的 find。 要將 find 看成篩選器命令使用,請包含小於符號 (<) 和搜索的文件名。當輸入文件名時,請記住搜索要區分大小寫。 例如,下面的命令查找文件 Trade.txt 中全部的「Pacific Rim」字符串: find "Pacific Rim" < trade.txt 要保存 find 命令的輸出而不是顯示輸出,請使用大於號 (>) 和要存儲輸出的文件名。例如,下面的命令查找文件 Trade.txt 中全部的「Pacific Rim」字符串,並將結果保存在 Nwtrade.txt 文件中: find "Pacific Rim" < trade.txt > nwtrade.txt 對文本文件排序 sort 命令按字母順序排列文本文件或命令的輸出。例如,能夠使用如下命令對 List.txt 文件的內容進行排序,並在屏幕上顯示結果: sort < list.txt 在 此範例中,sort 命令對 List.txt 文件的行進行排序並顯示結果,但不更改文件。要保存 sort 命令的輸出而不是顯示輸出,請在命令中包含大於號 (>) 和文件名。例如,能夠使用如下命令對 List.txt 文件的行按字母順序排序,並將結果存到 Alphlist.txt 文件中: sort < list.txt > alphlist.txt 要排序命令的輸出,請鍵入後面帶有管道 (|) 和 sort 命令的命令。例如,下面的命令對 find 命令的輸出結果進行排序: find "Jones" maillst.txt | sort 在鍵入該命令時,Windows 2000 按字母順序列出在其中出現「Jones」的行。 帶重定向符的合併命令 能夠將篩選器命令、其餘命令和文件名合併以生成自定義命令。例如,能夠使用如下命令存儲包含「LOG」字符串的文件名: dir /b | find "LOG" > loglist.txt Windows 2000 經過 find 過濾器命令發送 dir 命令的輸出並將包含字符串「Log」的文件名存儲在 Loglist.txt 文件中。將結果存儲爲文件名列表(如,A.log、Logdat.svd 和 Mylog.bat)。 要在相同命令中使用多個篩選器,請使用管道 (|) 分隔篩選器。例如,下面的命令搜索 C 盤上的每一個目錄以查找包含「Log」字符串的文件名,而且每次顯示一屏: dir c:\ /s /b | find "LOG" | more 由於使用管道 (|),Windows 2000 經過 find 命令發送 dir 命令的輸出結果。find 命令只選擇包含字符串「Log」的文件名。more 命令每次一屏地顯示 find 命令選擇的文件名。 More 每次顯示一個輸出屏幕。該命令一般用於查看長文件。能夠單獨使用此命令,或者使用它控制其餘命令的輸出,例如 type 命令。當顯示填充可用的查看區域時將出現 more 提示,用戶能夠輸入許多命令來控制查看文件其他部分的方式。 command name | more [/c] [/p] [/s] [/tn] [+n] more [[/c] [/p] [/s] [/tn] [+n]] < [drive:][path] filename more [/c] [/p] [/s] [/tn] [+n] [files] 參數 [drive:][path] filename 指定要顯示的文件。 command name 指定將顯示其輸出的命令。 /c 顯示頁面前清除屏幕。 /p 擴展換頁符。 /s 將多個空白行更改成一個空白行。 /tn 將製表位更改成 n 個空格 +n 顯示由 n 指定的行開始的第一個文件。 files 指定要顯示的文件列表。用空格分隔文件名。 More 子命令 如下命令在 more 提示 (-- More --) 下接受。 關鍵字 好啊做 space 顯示下一頁。 ENTER 顯示下一行。 F 顯示下一個文件。 q 退出。 ? 顯示可用命令。 = 顯示行號。 P n 顯示如下 n 行。 S n 跳過下面 n 行。 Find 在一個文件或多個文件中搜索指定的文本字符串。 當搜索到指定的文件後,find 將顯示出包含指定字符串的全部行。 find [/v] [/c] [/n] "string" [[drive:][path]filename[...]] 參數 /v 顯示未包含指定字符串的全部行。 /c 只顯示包含指定字符串的行數。 /n 將文件行號置於每行開頭。 /I 指定搜索不區分大小寫。 "string" 指定要搜索的字符組。必須將 string 的文本包括在引號中。 [drive:][path] filename 指定要在其中搜索指定字符串的文件的位置和名稱。 Sort 讀取輸入、排序數據並將結果寫到屏幕、文件和其餘設備上。 sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:] [path2]] [/o [drive3:][path3]filename3] [command |] sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o [drive3:][path3]filename3] 參數 /r 顛倒排序順序,即從 Z 到 A 排序,而後從 9 到 0 排序。 /+n 指定字符位置號 n,sort 在此處開始每次比較。例如,/+3 表示每次比較在每行的第三個字符開始。少於 n 個字符的行在其餘行以前排序。默認狀況下,比較在每行的第一個字符開始。 /m kilobytes 指定用於排序的主內存數量,按千字節 (KB) 計。使用的內存最小值老是 160 KB。若是指定了內存大小,則不管有多少主內存可用,指定的確切數量(但至少 160 KB)的內存將用於排序。 若是輸入輸出均爲文件,在沒有指定大小時,默認最大內存大小爲可用主內存的 90%,不然爲主內存的 45%。默認設置一般會產生最佳的性能。 /l locale 替代由系統默認區域設置定義的字符排序順序;即在安裝 Windows 2000 時選擇的語言和「國家(地區)」。目前,默認區域設置惟一的備用選項就是「C」區域設置,該區域設置比天然語言排序快,根據二進制編碼對字符排序。 /rec characters 指定記錄或輸入文件的行中的最多字符數(默認值爲 4096,最大值爲 65535)。 [drive1:][path1]filename1 指定要排序的文件。若是沒有指定文件名,則對標準輸入排序。指定輸入文件比將同一文件做爲標準輸入重定向速度快。 /t [drive2:][path2] 指定保留 sort 命令工做存儲的目錄路徑,防止數據不能裝入主內存。默認爲使用系統臨時目錄。 /o [drive3:][path3]filename3 指定要存儲排序後的輸入的文件。若是沒有指定,數據將寫入標準輸出。指定輸出文件比將同一文件做爲標準輸出重定向速度快!