batch入门教程(4)

转载自公众号:icqedu

今天是Batch入门教程的最后一章内容:调用与传参。相信通过前面的学习,大家已经掌握了Windows Batch有关的基础知识和编程方法,以及利用Windows Batch建立初级的编程思维方式。今后我们还会学习到更多的脚本语言,从而更加顺利投入到以后的开发和探究中。

** 前期回顾 **

Batch入门教程丨部署与Hello World(上)

Batch入门教程丨部署与Hello World(下)

Batch入门教程丨进阶!认识变量相关概念

Batch入门教程丨进阶!逻辑判断

调用与传参

虽然按照原理来讲,把所有的功能都放入一个Batch文件中是可行的,但是却会出现冗杂的问题。因此,我们可以创建多个Batch文件,并互相调用。在Batch中,我们使用call来对Batch文件进行调用并传参。start也可以传参,但是并不具备调用的性质,而仅仅是新运行指定的对象。

call

call指令的用法与一般的指令用法相同,都只需要指定对象即可:

image

后面的参数可以无限叠加。

我们先举一个比较简单的调用例子:

image

我们得到的结果是:

image

这很明显代表着我们已经将b.cmd打开了。不过,这不叫作「打开」,而叫作调用(Transfer)。

我们可以看到在上面我们给出的用法里,对象后面还有一个参数,而在上面的例子里却没有参数。这是正确的,只是功能会少一点而已。一般地,我们使用 call 就是为了带上参数。接下来我们来了解怎样使用这些参数。

首先我们要明白什么叫作参数(Parameter)。参数是指一个功能的实现所需要的条件和因素,它们一般都以数据的形式呈现。通俗来讲,就是实现这个功能所需要的数据。例如,我们要实现一个做加法的功能,我们都知道:

加数 + 加数 = 和

那么在这个运算中,两个加数就是参数,和是结果(result)。在编程中,这个结果叫作返回值(return value),这个流程所象征的基本意义所代指的概念叫作函数(Function)。

那么,我们既然要给别的.bat文件传参,那么它必定会实现某一个功能,实现功能就需要参数。那么,我们如何输入这些参数和获取这些参数呢?

首先我们要分清楚调用方(Caller)和被调用方(Callee)。我们先假定两个文件:a.cmd和b.cmd,它们的代码分别如下:

image

您能分清楚这里谁是调用方,谁是被调用方吗?调用方是a.cmd,被调用方是b.cmd,那么a.cmd就要给b.cmd传参。a.cmd里用到了一行call指令:

image

对应上面我们所表述的用法,b.cmd是对象,Hello则是一个参数。那么这个参数就相当于是告诉b.cmd 了,接下来我们要在b.cmd里使用它。于是我们就有了这行输出指令:

image

您能猜出%1的含义吗?

它是一个变量,但不是一个标准的变量。它代表着第一个参数。在上述指令中,从Hello开始即为参数,若我们执行:

image

我们得到:

image

在a.cmd中,我们传参(pass)给了b.cmd。这些参数分别为:

Hello,This,is,a,sentence,.。这分别是独立的6个参数,按照从左往右的顺序排序。

因此在被调用方b.cmd里,%1就代表Hello,%2就代表This,%3就代表is,以此类推。在上面的例子中,b.cmd内,%5%6写在了一起,因为%6的值是一个 .,与%5连用,结果则是sentence.。如果依然隔开,那么就是sentence .,显示并不自然。

现在我们知道了如何传参,以及如何调用参数。那么,我们处理的结果该如何返回呢?

exit /b

在Batch中 ,exit /b后必须接上数字,我们称为exitCode即退出码。它的作用是,当被调用时,作为被调用方,将会对调用方返回这个exitCode。只要exit 指令加上了参数/b,无论有没有接exitCode,它所退出的都是程序而不是进程。

这句话怎么理解呢?在第一章里我们已经给出了图示。如果退出的是程序,如果当前程序是被调用方,那么它会直接返回到调用方继续执行指令(如果当前程序没有被调用,那么exit /b等价于exit),但是如果退出的是进程,那么什么都不会做了,会将整个进程退掉。

我们来看个例子:

image

上述指令中我们用到了%ERRORLEVEL%,因为exit /b [errorCode],作为调用方时返回的exitCode会直接充当调用方的%ERRORLEVEL%。

上述例子我们实际上贯彻了函数的基本思想,但是在此不作具体供述。我们先看看结果:

image

输出的是2,正好是1+1的和。为什么呢?请看流程图:

image

也就是说我们传递给add.cmd的两个参数1, 1经过add.cmd内的一行指令set /a a=%1+%2的操作,将它们两个加起来的值赋给了a,然后再用a当作exitCode 使用exit /b %a% 将a的值传回a.cmd的%ERRORLEVEL%里,最后a.cmd输出它的值。这就是1+1的结果。

如果您仍然无法理解,可以在评论区提问。

需要注意的是exit /b的[exitCode] 仅能为Batch可以识别的数字,因此这种传参方式仅能够传回数字类型的参数。

call [bin] [param...]

这种用法与先前的用法并没有什么出入,仍然是后面跟上一个对象,以及要传给它的参数。这一点在于它所调用的对象并不是Batch文件,而是Windows的系统文件。利用这个功能,我们几乎可以完成任何操作。

例如,我们可以让电脑休眠:

image

其中,对于不同的对象,我们能够传入的参数是不一样的。如果要调用rundll32,我们就必须了解它的参数,在本教程中不加以供述。对于上面一行指令powercfg,它是用来改变休眠/睡眠状态的。如果powercfg -hibernate 设置为off,那么下面那行call 的结果就是睡眠,如果是on则是休眠。二者有一定的区别,各位可以通过搜索查看。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • 入门,进入门,进入这扇门,进入这样一扇(门框+门板+门铃+门锁),使用脚的指定部位完成动作以进入主函数,kkkkk...
    苍简阅读 2,870评论 1 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,984评论 0 13
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,703评论 0 9
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,739评论 0 10
  • 黑芝麻作为药食两用的佳品,具有“补肝肾,滋五脏,益精血,润肠燥”等功效,被人们视为滋补圣品吗,但是很多时候大家都是...
    海小兰阅读 262评论 0 0