batch入門教程(4)

轉(zhuǎn)載自公眾號:icqedu

今天是Batch入門教程的最后一章內(nèi)容:調(diào)用與傳參。相信通過前面的學(xué)習(xí)唠梨,大家已經(jīng)掌握了Windows Batch有關(guān)的基礎(chǔ)知識和編程方法,以及利用Windows Batch建立初級的編程思維方式侥啤。今后我們還會學(xué)習(xí)到更多的腳本語言当叭,從而更加順利投入到以后的開發(fā)和探究中茬故。

** 前期回顧 **

?Batch入門教程丨部署與Hello World(上)

?Batch入門教程丨部署與Hello World(下)

?Batch入門教程丨進(jìn)階!認(rèn)識變量相關(guān)概念

?Batch入門教程丨進(jìn)階蚁鳖!邏輯判斷

調(diào)用與傳參

雖然按照原理來講磺芭,把所有的功能都放入一個Batch文件中是可行的,但是卻會出現(xiàn)冗雜的問題醉箕。因此钾腺,我們可以創(chuàng)建多個Batch文件,并互相調(diào)用讥裤。在Batch中放棒,我們使用call來對Batch文件進(jìn)行調(diào)用并傳參。start也可以傳參坞琴,但是并不具備調(diào)用的性質(zhì)哨查,而僅僅是新運行指定的對象。

call

call指令的用法與一般的指令用法相同剧辐,都只需要指定對象即可:

image

后面的參數(shù)可以無限疊加。

我們先舉一個比較簡單的調(diào)用例子:

image

我們得到的結(jié)果是:

image

這很明顯代表著我們已經(jīng)將b.cmd打開了邮府。不過荧关,這不叫作「打開」,而叫作調(diào)用(Transfer)褂傀。

我們可以看到在上面我們給出的用法里忍啤,對象后面還有一個參數(shù),而在上面的例子里卻沒有參數(shù)仙辟。這是正確的同波,只是功能會少一點而已。一般地叠国,我們使用 call 就是為了帶上參數(shù)未檩。接下來我們來了解怎樣使用這些參數(shù)。

首先我們要明白什么叫作參數(shù)(Parameter)粟焊。參數(shù)是指一個功能的實現(xiàn)所需要的條件和因素冤狡,它們一般都以數(shù)據(jù)的形式呈現(xiàn)。通俗來講项棠,就是實現(xiàn)這個功能所需要的數(shù)據(jù)悲雳。例如,我們要實現(xiàn)一個做加法的功能香追,我們都知道:

加數(shù) + 加數(shù) = 和

那么在這個運算中合瓢,兩個加數(shù)就是參數(shù),和是結(jié)果(result)透典。在編程中晴楔,這個結(jié)果叫作返回值(return value)顿苇,這個流程所象征的基本意義所代指的概念叫作函數(shù)(Function)。

那么滥崩,我們既然要給別的.bat文件傳參岖圈,那么它必定會實現(xiàn)某一個功能,實現(xiàn)功能就需要參數(shù)钙皮。那么蜂科,我們?nèi)绾屋斎脒@些參數(shù)和獲取這些參數(shù)呢?

首先我們要分清楚調(diào)用方(Caller)和被調(diào)用方(Callee)短条。我們先假定兩個文件:a.cmd和b.cmd导匣,它們的代碼分別如下:

image

您能分清楚這里誰是調(diào)用方,誰是被調(diào)用方嗎茸时?調(diào)用方是a.cmd贡定,被調(diào)用方是b.cmd,那么a.cmd就要給b.cmd傳參可都。a.cmd里用到了一行call指令:

image

對應(yīng)上面我們所表述的用法缓待,b.cmd是對象,Hello則是一個參數(shù)渠牲。那么這個參數(shù)就相當(dāng)于是告訴b.cmd 了旋炒,接下來我們要在b.cmd里使用它。于是我們就有了這行輸出指令:

image

您能猜出%1的含義嗎签杈?

它是一個變量瘫镇,但不是一個標(biāo)準(zhǔn)的變量。它代表著第一個參數(shù)答姥。在上述指令中铣除,從Hello開始即為參數(shù),若我們執(zhí)行:

image

我們得到:

image

在a.cmd中鹦付,我們傳參(pass)給了b.cmd尚粘。這些參數(shù)分別為:

Hello,This,is,a,sentence,.。這分別是獨立的6個參數(shù)睁壁,按照從左往右的順序排序背苦。

因此在被調(diào)用方b.cmd里,%1就代表Hello潘明,%2就代表This行剂,%3就代表is,以此類推钳降。在上面的例子中厚宰,b.cmd內(nèi),%5%6寫在了一起,因為%6的值是一個 .铲觉,與%5連用澈蝙,結(jié)果則是sentence.。如果依然隔開撵幽,那么就是sentence .灯荧,顯示并不自然。

現(xiàn)在我們知道了如何傳參盐杂,以及如何調(diào)用參數(shù)逗载。那么,我們處理的結(jié)果該如何返回呢链烈?

exit /b

在Batch中 厉斟,exit /b后必須接上數(shù)字,我們稱為exitCode即退出碼强衡。它的作用是擦秽,當(dāng)被調(diào)用時,作為被調(diào)用方漩勤,將會對調(diào)用方返回這個exitCode感挥。只要exit 指令加上了參數(shù)/b,無論有沒有接exitCode,它所退出的都是程序而不是進(jìn)程瓢湃。

這句話怎么理解呢?在第一章里我們已經(jīng)給出了圖示。如果退出的是程序嗡综,如果當(dāng)前程序是被調(diào)用方,那么它會直接返回到調(diào)用方繼續(xù)執(zhí)行指令(如果當(dāng)前程序沒有被調(diào)用挨下,那么exit /b等價于exit)侠仇,但是如果退出的是進(jìn)程,那么什么都不會做了筑累,會將整個進(jìn)程退掉袱蜡。

我們來看個例子:

image

上述指令中我們用到了%ERRORLEVEL%,因為exit /b [errorCode]慢宗,作為調(diào)用方時返回的exitCode會直接充當(dāng)調(diào)用方的%ERRORLEVEL%坪蚁。

上述例子我們實際上貫徹了函數(shù)的基本思想,但是在此不作具體供述镜沽。我們先看看結(jié)果:

image

輸出的是2敏晤,正好是1+1的和。為什么呢缅茉?請看流程圖:

image

也就是說我們傳遞給add.cmd的兩個參數(shù)1, 1經(jīng)過add.cmd內(nèi)的一行指令set /a a=%1+%2的操作嘴脾,將它們兩個加起來的值賦給了a,然后再用a當(dāng)作exitCode 使用exit /b %a% 將a的值傳回a.cmd的%ERRORLEVEL%里,最后a.cmd輸出它的值译打。這就是1+1的結(jié)果耗拓。

如果您仍然無法理解,可以在評論區(qū)提問奏司。

需要注意的是exit /b的[exitCode] 僅能為Batch可以識別的數(shù)字乔询,因此這種傳參方式僅能夠傳回數(shù)字類型的參數(shù)。

call [bin] [param...]

這種用法與先前的用法并沒有什么出入韵洋,仍然是后面跟上一個對象竿刁,以及要傳給它的參數(shù)。這一點在于它所調(diào)用的對象并不是Batch文件麻献,而是Windows的系統(tǒng)文件们妥。利用這個功能,我們幾乎可以完成任何操作勉吻。

例如监婶,我們可以讓電腦休眠:

image

其中,對于不同的對象齿桃,我們能夠傳入的參數(shù)是不一樣的惑惶。如果要調(diào)用rundll32,我們就必須了解它的參數(shù)短纵,在本教程中不加以供述带污。對于上面一行指令powercfg,它是用來改變休眠/睡眠狀態(tài)的香到。如果powercfg -hibernate 設(shè)置為off鱼冀,那么下面那行call 的結(jié)果就是睡眠,如果是on則是休眠悠就。二者有一定的區(qū)別千绪,各位可以通過搜索查看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梗脾,一起剝皮案震驚了整個濱河市荸型,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炸茧,老刑警劉巖瑞妇,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梭冠,居然都是意外死亡辕狰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門妈嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柳琢,“玉大人,你說我怎么就攤上這事〖砹常” “怎么了他去?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長倒堕。 經(jīng)常有香客問我灾测,道長,這世上最難降的妖魔是什么垦巴? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任媳搪,我火速辦了婚禮,結(jié)果婚禮上骤宣,老公的妹妹穿的比我還像新娘秦爆。我一直安慰自己,他們只是感情好憔披,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布等限。 她就那樣靜靜地躺著,像睡著了一般芬膝。 火紅的嫁衣襯著肌膚如雪望门。 梳的紋絲不亂的頭發(fā)上筹误,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天癣缅,我揣著相機(jī)與錄音厨剪,去河邊找鬼。 笑死友存,一個胖子當(dāng)著我的面吹牛丽惶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爬立,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼万哪!你這毒婦竟也來了侠驯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤奕巍,失蹤者是張志新(化名)和其女友劉穎吟策,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檩坚,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年拖叙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赂乐。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挨措,靈堂內(nèi)的尸體忽然破棺而出挖滤,到底是詐尸還是另有隱情,我是刑警寧澤浅役,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布斩松,位于F島的核電站,受9級特大地震影響觉既,放射性物質(zhì)發(fā)生泄漏惧盹。R本人自食惡果不足惜岭参,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娄徊,春花似錦、人聲如沸橄仆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茴丰。三九已至贿肩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間龄寞,已是汗流浹背汰规。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留色解,地道東北人茂嗓。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像科阎,于是被迫代替她去往敵國和親锣笨。 傳聞我的和親對象是個殘疾皇子蝌矛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 入門,進(jìn)入門错英,進(jìn)入這扇門入撒,進(jìn)入這樣一扇(門框+門板+門鈴+門鎖)茅逮,使用腳的指定部位完成動作以進(jìn)入主函數(shù),kkkkk...
    蒼簡閱讀 2,870評論 1 2
  • 專業(yè)考題類型管理運行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,988評論 0 13
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉判哥,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評論 0 9
  • 一氮唯、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,744評論 0 10
  • 黑芝麻作為藥食兩用的佳品夺荒,具有“補肝腎瞒渠,滋五臟,益精血技扼,潤腸燥”等功效伍玖,被人們視為滋補圣品嗎,但是很多時候大家都是...
    海小蘭閱讀 262評論 0 0