又一篇不錯的批處理bat學習教程第4/5頁
更新時間:2007年02月28日 00:00:00 作者:
綜上:“|”命令的作用,就是讓前一命令的輸出當做后一命令的輸入。
“>、>>”
這兩個命令的效果從本質上來說都是一樣的,他們都是輸出重定向命令,說的通俗一點,就是把前面命令的輸出寫入到一個文件中。這兩個命令的唯一區(qū)別是,>會清除掉原有文件中的內容后把新的內容寫入原文件,而>>只會另起一行追加新的內容到原文件中,而不會改動其中的原有內容。例十五:
復制代碼 代碼如下:
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
復制粘貼上面代碼,將在當前目錄下生成一個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、管道命令>和>>的區(qū)別如上所述。如果這里只用>命令來完成上面操作,最后也會生成一個a.bat,但里面的內容就只剩下最后一行exit了。所以>和>>一般都聯(lián)合起來用,除非你重定向的輸出只有一行,那么就可以只用>了。結合例一再仔細體會輸出重定向管道命令>和>>的用法。
“<、>&、<&”
這三個命令也是管道命令,但它們一般不常用,你只需要知道一下就ok了,當然如果想仔細研究的話,可以自己查一下資料。
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
>&,將一個句柄的輸出寫入到另一個句柄的輸入中。
<&,剛好和>&相反,從一個句柄讀取輸入并將其寫入到另一個句柄輸出中。
關于這三個管道命令的舉例,在后面批處理腳本的精妙應用中還將涉及到。
下面介紹組合命令:&、&&、||
組合命令,顧名思義,就是可以把多個命令組合起來當一個命令來執(zhí)行。這在批處理腳本里是允許的,而且用的非常廣泛。它的格式很簡單----既然現(xiàn)在已經成了一個文件了,那么這多個命令就要用這些組合命令連接起來放在同一行----因為批處理認行不認命令數(shù)目。組合命令的作用,就如同給愛人陪不是,說一句是說,說十句也是說,不一次把好話都說了出來,效果可能會好些----當然得排除一種特殊情況:這些話是否有先后順序,有些話是否可以同時說。在批處理腳本里也一樣,有些時候某些命令是不能同時執(zhí)行的,后面給你說。
“&”:
這可以說是最簡單的一個組合命令了,它的作用是用來連接n個DOS命令,并把這些命令按順序執(zhí)行,而不管是否有命令執(zhí)行失敗。例十六:
copy a.txt b.txt /y & del a.txt
其實這句和move a.txt b.txt的效果是一樣的,只不過前者是分了兩步來進行的(在后面還將涉及到具體使用哪種方法的問題)。這個命令很簡單,就不多費口舌了,唯一需要注意的一點是,這里&兩邊的命令是有執(zhí)行順序的,從前往后執(zhí)行。
“&&”:
切記,這里介紹的幾個命令都是組合命令,所以他們前后都必須都有其他命令(要不如何組合?)。這個命令也不例外,它可以把它前后兩個命令組合起來當一個命令來用,與&命令不同之處在于,它在從前往后依次執(zhí)行被它連接的幾個命令時會自動判斷是否有某個命令執(zhí)行出錯,一旦發(fā)現(xiàn)出錯后將不繼續(xù)執(zhí)行后面剩下的命令。這就為我們自動化完成一些任務提供了方便。例十七:
dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www
如果遠程主機存在user.mdb,則copy到本地e:\backup\www,如果不存在當然就不執(zhí)行copy了。這句對搞網管的朋友是否有點用呢?呵呵。其實它和下面這句的作用是一樣的:
if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www
至于你喜歡用哪個就隨便了,我沒辦法判斷dir和if兩個命令哪一個執(zhí)行效率更高,所以不知道用哪個更好,呵呵。
你是否還記得“有些命令是不能同時執(zhí)行的”?你是否相信這句話?當然得相信,不信就給你出道題:把C盤和D盤的文件和文件夾列出到a.txt文件中。你將如何來搞定這道題?有朋友說,這還不是很easy的問題嗎?同時執(zhí)行兩個dir,然后把得到的結果>到a.txt里就ok了嘛,看例十八:
dir c:\ && dir d:\ > a.txt
仔細研究一下這句執(zhí)行后的結果,看看是否能達到題目的要求!錯了!這樣執(zhí)行后a.txt里只有D盤的信息!為什么?就因為這里&&命令和>命令不能同時出現(xiàn)一個句子里(批處理把一行看成一個句子)?。〗M合命令&&的優(yōu)先級沒有管道命令>的優(yōu)先級高(自己總結的,不妥的地方請指正)!所以這句在執(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。例十八中的幾句的差別比較特殊,值得好好研究體會一下。
當然這里還可以利用&命令(自己想一下道理哦):
dir c:\ > a.txt & dir d:\ >> a.txt
“||”:
這個命令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執(zhí)行多條命令時,當遇到一個執(zhí)行正確的命令就退出此命令組合,不再繼續(xù)執(zhí)行下面的命令。題目:查看當前目錄下是否有以s開頭的exe文件,如果有則退出。例十九:
Copy code
@echo off
dir s*.exe || exit
其實這個例子是有破綻的,你看出來了嗎?其實很簡單,自己試試就知道了嘛:如果存在那個exe文件,就退出;如果不存在那個exe文件,也退出!為什么?因為如果不存在那個.exe文件,則前一條命令dir s*.exe執(zhí)行肯定是不成功的,所以就繼續(xù)執(zhí)行exit,自然就退出了,呵呵。那么如何解決題目給出的問題呢?看例二十:
Copy code
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
這樣執(zhí)行的結果,就能達到題目的要求,是否存在s*.exe將出現(xiàn)兩種結果。這里加暫停的意思,當然是讓你能看到echo輸出的內容,否則一閃而過的窗口,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
相關文章
批處理獲取文件夾下面txt文件行數(shù)并添加到文件名后
本文給大家匯總介紹了下使用批處理獲取文件夾下面txt文件行數(shù)并添加到文件名后的兩種方法,思路都很不錯,這里推薦給大家。2015-09-09

