批处理命令之函数传参和跳转详解

本文主要为大家详细介绍了批处理命令中函数传参和跳转的相关应用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

函数

函数封装是编程语言必不可少的环节,而函数在创建时,至少需要有一个函数标识,同时需要一块区域,来组成函数体。Dos中的函数用标签来标识,以goto:eof结束,比如现在新建一个脚本func.bat

1

2

3

4

5

6

7

@echo off

call:func

echo end of call

goto:eof

:func

echo call me

goto:eof

上面4行类似于主函数,@echo off关闭回显,然后调用func,调用结束之后打印end of call,最后使用goto:eof,结束命令行。

下面三行可以理解为自定义函数,内容是打印call me。

运行结果如下

>test.bat
call me
end of call

即命令行先打印了call me,后打印end of call,说明其运行过程的确是先调用了func,然后再执行的echo end of call。

参数传递

对于一个脚本来说,如果想在调用bat文件时进行参数传递,则可用%或者%~来标识传进来的参数,二者的区别是,后者会自动删除参数中的引号,而前者不会。例如下面一个名为para.bat的脚本

1

2

:: para.bat

@echo you've given me %1 or %~1

在命令行中调用的结果如下

>para "123"
you've given me "123" or 123

函数传参也采用了这种逻辑,下面修改test.bat脚本如下

1

2

3

4

5

6

7

@echo off

call:func 100

echo end of call

goto:eof

:func

echo you've given me %1

goto:eof

运行结果如下

>test.bat
you've given me 100
end of call 

返回值

DOS函数没有返回值,若想保留函数中的计算结果,要么将其设为全局变量,要么采用“参数引用”,即直接更改传入参数的值。先来看第一种

1

2

3

4

5

6

7

8

:: func1.bat

@echo off

call :sum 10 20

echo sum(10,20)=%result%

goto :eof

:sum

set /a result=%1 + %2

goto :eof

其中采用set指令,将result设为传入两个参数的和,随后在主程序中直接调用%result%,并得到了正确的结果,如下所示

>func1
sum(10,20)=30

另一种方法u是直接把想要返回的变量作为参数传入函数中,示例如下

1

2

3

4

5

6

7

8

:: func2.bat

@echo off

call :sum 10 20 result

echo sum(10, 20)=%result%

goto :eof

:sum

set /a %3=%1 + %2

goto :eof

这里面把result作为参数传入了sum函数中,而sum函数的逻辑是,让传入的第三个参数等于前两个参数之和,这样就在不创建“全局变量”的情况下,对result赋值了。

局部变量保护

通过set命令创建的变量,默认就是全局的,这一点已经在func1.bat中得到了认证。但全局变量太多容易导致程序变得混乱,虽然不太可能用批处理语句去写什么大工程,但就算用了两次for循环,都会引起全局变量变化的风险,所以局部变量保护还是有存在的意义的。

在批处理语句中,setlocal和endlocal中间的函数段,set所设置的参数便是局部的。为此可对func1的sum函数稍作修改

1

2

3

4

5

6

7

:: func3.bat

:: 主程序与func1.bat相同

:sum

setlocal

set /a result=%1 + %2

endlocal

goto :eof

这样运行结果就会变成

>func3.bat
sum(10,20)=

也就是说,result并没有被赋值。

goto

goto是鼎鼎大名的跳转指令,曾在历史上引起过严重灾难,但对于命令行这种临时使用的代码很短的脚本来说,则算是无伤大雅。其作用是跳转到某个标签所在的区块,而标签则以冒号开头。

由此观之,:eof就是一个默认的局部标签,表示当前程序的结尾。下面做一个简单的示例,用goto跳转来打印BAT这三个字母。

1

2

3

4

5

6

7

8

9

10

11

12

:: BAT.bat

@echo off

goto:B

goto:eof

:A

echo A

goto :T

:B

echo B

goto :A

:T

echo T

效果如下

>bat
B
A
T

到此这篇关于批处理命令之函数传参和跳转详解的文章就介绍到这了,希望可以帮到你。

来源:微点阅读   https://www.weidianyuedu.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值