又一篇不錯(cuò)的批處理bat學(xué)習(xí)教程第4/5頁(yè)
更新時(shí)間:2007年02月28日 00:00:00 作者:
綜上:“|”命令的作用,就是讓前一命令的輸出當(dāng)做后一命令的輸入。
“>、>>”
這兩個(gè)命令的效果從本質(zhì)上來(lái)說(shuō)都是一樣的,他們都是輸出重定向命令,說(shuō)的通俗一點(diǎn),就是把前面命令的輸出寫(xiě)入到一個(gè)文件中。這兩個(gè)命令的唯一區(qū)別是,>會(huì)清除掉原有文件中的內(nèi)容后把新的內(nèi)容寫(xiě)入原文件,而>>只會(huì)另起一行追加新的內(nèi)容到原文件中,而不會(huì)改動(dòng)其中的原有內(nèi)容。例十五:
復(fù)制代碼 代碼如下:
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
復(fù)制粘貼上面代碼,將在當(dāng)前目錄下生成一個(gè)a.bat文件,里面的內(nèi)容如下:
復(fù)制代碼 代碼如下:
@echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit
看到這里,你得到了多少信息?1、可以直接在DOS提示符下利用echo命令的寫(xiě)入功能編輯一個(gè)文本,而不需要專門的文本編輯工具;2、管道命令>和>>的區(qū)別如上所述。如果這里只用>命令來(lái)完成上面操作,最后也會(huì)生成一個(gè)a.bat,但里面的內(nèi)容就只剩下最后一行exit了。所以>和>>一般都聯(lián)合起來(lái)用,除非你重定向的輸出只有一行,那么就可以只用>了。結(jié)合例一再仔細(xì)體會(huì)輸出重定向管道命令>和>>的用法。
“<、>&、<&”
這三個(gè)命令也是管道命令,但它們一般不常用,你只需要知道一下就ok了,當(dāng)然如果想仔細(xì)研究的話,可以自己查一下資料。
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤(pán)中讀入。
>&,將一個(gè)句柄的輸出寫(xiě)入到另一個(gè)句柄的輸入中。
<&,剛好和>&相反,從一個(gè)句柄讀取輸入并將其寫(xiě)入到另一個(gè)句柄輸出中。
關(guān)于這三個(gè)管道命令的舉例,在后面批處理腳本的精妙應(yīng)用中還將涉及到。
下面介紹組合命令:&、&&、||
組合命令,顧名思義,就是可以把多個(gè)命令組合起來(lái)當(dāng)一個(gè)命令來(lái)執(zhí)行。這在批處理腳本里是允許的,而且用的非常廣泛。它的格式很簡(jiǎn)單----既然現(xiàn)在已經(jīng)成了一個(gè)文件了,那么這多個(gè)命令就要用這些組合命令連接起來(lái)放在同一行----因?yàn)榕幚碚J(rèn)行不認(rèn)命令數(shù)目。組合命令的作用,就如同給愛(ài)人陪不是,說(shuō)一句是說(shuō),說(shuō)十句也是說(shuō),不一次把好話都說(shuō)了出來(lái),效果可能會(huì)好些----當(dāng)然得排除一種特殊情況:這些話是否有先后順序,有些話是否可以同時(shí)說(shuō)。在批處理腳本里也一樣,有些時(shí)候某些命令是不能同時(shí)執(zhí)行的,后面給你說(shuō)。
“&”:
這可以說(shuō)是最簡(jiǎn)單的一個(gè)組合命令了,它的作用是用來(lái)連接n個(gè)DOS命令,并把這些命令按順序執(zhí)行,而不管是否有命令執(zhí)行失敗。例十六:
copy a.txt b.txt /y & del a.txt
其實(shí)這句和move a.txt b.txt的效果是一樣的,只不過(guò)前者是分了兩步來(lái)進(jìn)行的(在后面還將涉及到具體使用哪種方法的問(wèn)題)。這個(gè)命令很簡(jiǎn)單,就不多費(fèi)口舌了,唯一需要注意的一點(diǎn)是,這里&兩邊的命令是有執(zhí)行順序的,從前往后執(zhí)行。
“&&”:
切記,這里介紹的幾個(gè)命令都是組合命令,所以他們前后都必須都有其他命令(要不如何組合?)。這個(gè)命令也不例外,它可以把它前后兩個(gè)命令組合起來(lái)當(dāng)一個(gè)命令來(lái)用,與&命令不同之處在于,它在從前往后依次執(zhí)行被它連接的幾個(gè)命令時(shí)會(huì)自動(dòng)判斷是否有某個(gè)命令執(zhí)行出錯(cuò),一旦發(fā)現(xiàn)出錯(cuò)后將不繼續(xù)執(zhí)行后面剩下的命令。這就為我們自動(dòng)化完成一些任務(wù)提供了方便。例十七:
dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www
如果遠(yuǎn)程主機(jī)存在user.mdb,則copy到本地e:\backup\www,如果不存在當(dāng)然就不執(zhí)行copy了。這句對(duì)搞網(wǎng)管的朋友是否有點(diǎn)用呢?呵呵。其實(shí)它和下面這句的作用是一樣的:
if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www
至于你喜歡用哪個(gè)就隨便了,我沒(méi)辦法判斷dir和if兩個(gè)命令哪一個(gè)執(zhí)行效率更高,所以不知道用哪個(gè)更好,呵呵。
你是否還記得“有些命令是不能同時(shí)執(zhí)行的”?你是否相信這句話?當(dāng)然得相信,不信就給你出道題:把C盤(pán)和D盤(pán)的文件和文件夾列出到a.txt文件中。你將如何來(lái)搞定這道題?有朋友說(shuō),這還不是很easy的問(wèn)題嗎?同時(shí)執(zhí)行兩個(gè)dir,然后把得到的結(jié)果>到a.txt里就ok了嘛,看例十八:
dir c:\ && dir d:\ > a.txt
仔細(xì)研究一下這句執(zhí)行后的結(jié)果,看看是否能達(dá)到題目的要求!錯(cuò)了!這樣執(zhí)行后a.txt里只有D盤(pán)的信息!為什么?就因?yàn)檫@里&&命令和>命令不能同時(shí)出現(xiàn)一個(gè)句子里(批處理把一行看成一個(gè)句子)??!組合命令&&的優(yōu)先級(jí)沒(méi)有管道命令>的優(yōu)先級(jí)高(自己總結(jié)的,不妥的地方請(qǐng)指正)!所以這句在執(zhí)行時(shí)將本分成這兩部分:dir c:\和dir d:\ > a.txt,而并不是如你想的這兩部分:dir c:\ && dir d:\和> a.txt。要使用組合命令&&達(dá)到題目的要求,必須得這么寫(xiě):
dir c:\ > a.txt && dir d:\ >> a.txt
這樣,依據(jù)優(yōu)先級(jí)高低,DOS將把這句話分成以下兩部分:dir c:\ > a.txt和dir d:\ >> a.txt。例十八中的幾句的差別比較特殊,值得好好研究體會(huì)一下。
當(dāng)然這里還可以利用&命令(自己想一下道理哦):
dir c:\ > a.txt & dir d:\ >> a.txt
“||”:
這個(gè)命令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執(zhí)行多條命令時(shí),當(dāng)遇到一個(gè)執(zhí)行正確的命令就退出此命令組合,不再繼續(xù)執(zhí)行下面的命令。題目:查看當(dāng)前目錄下是否有以s開(kāi)頭的exe文件,如果有則退出。例十九:
Copy code
@echo off
dir s*.exe || exit
其實(shí)這個(gè)例子是有破綻的,你看出來(lái)了嗎?其實(shí)很簡(jiǎn)單,自己試試就知道了嘛:如果存在那個(gè)exe文件,就退出;如果不存在那個(gè)exe文件,也退出!為什么?因?yàn)槿绻淮嬖谀莻€(gè).exe文件,則前一條命令dir s*.exe執(zhí)行肯定是不成功的,所以就繼續(xù)執(zhí)行exit,自然就退出了,呵呵。那么如何解決題目給出的問(wèn)題呢?看例二十:
Copy code
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
這樣執(zhí)行的結(jié)果,就能達(dá)到題目的要求,是否存在s*.exe將出現(xiàn)兩種結(jié)果。這里加暫停的意思,當(dāng)然是讓你能看到echo輸出的內(nèi)容,否則一閃而過(guò)的窗口,echo就白寫(xiě)了。
給出兩個(gè)更好研究?jī)?yōu)先級(jí)(同時(shí)也是更難理解)的腳本,仔細(xì)研究它們的區(qū)別,以便徹底理解各種命令的優(yōu)先級(jí)順序,對(duì)以后自己利用這些命令寫(xiě)腳本有很大的好處----不會(huì)出錯(cuò)!OK,請(qǐng)看例二十一和例二十二。
例二十一:
@echo off
dir a.ttt /a & dir a.txt || exit
例二十二:
@echo off
dir a.ttt /a && dir a.txt || exit
相關(guān)文章
全盤(pán)搜索指定文件并拷貝到指定位置[自動(dòng)重命名]的批處理
全盤(pán)搜索指定文件并拷貝到指定位置[自動(dòng)重命名]的批處理2009-12-12自動(dòng)生成批量執(zhí)行SQL腳本的批處理實(shí)例演示
DBA那邊給我導(dǎo)出了所有的存儲(chǔ)、函數(shù)等等對(duì)象的創(chuàng)建腳本,有上千個(gè)文件,接下來(lái)為大家介紹下如何將這些對(duì)象創(chuàng)建腳本導(dǎo)入到另外一個(gè)庫(kù)2013-04-04Bootcfg 配置、查詢或更改 Boot.ini 文件設(shè)置
Bootcfg 配置、查詢或更改 Boot.ini 文件設(shè)置...2007-09-09用批處理刪除N天前或指定日期時(shí)間(前后)創(chuàng)建(或修改)的文件
這篇文章主要介紹了用批處理刪除N天前或指定日期時(shí)間(前后)創(chuàng)建(或修改)的文件,需要的朋友可以參考下2016-11-11批處理實(shí)現(xiàn)的結(jié)束進(jìn)程并刪除文件的代碼
批處理實(shí)現(xiàn)的結(jié)束進(jìn)程并刪除文件的代碼,挺有創(chuàng)意的,需要的朋友可以參考下。2009-12-12