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

2024-03-04 0 711
目录
  • 函数
  • 参数传递
  • 返回值
  • 局部变量保护
  • goto

函数

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

@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.batcall meend of call

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

参数传递

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

:: para.bat
@echo you\’ve given me %1 or %~1

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

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

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

@echo off
call:func 100
echo end of call
goto:eof
:func
echo you\’ve given me %1
goto:eof

运行结果如下

>test.batyou've given me 100end of call

返回值

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

:: 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%,并得到了正确的结果,如下所示

>func1sum(10,20)=30

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

:: 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函数稍作修改

:: func3.bat
:: 主程序与func1.bat相同
:sum
setlocal
set /a result=%1 + %2
endlocal
goto :eof

这样运行结果就会变成

>func3.batsum(10,20)=

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

goto

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

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

:: BAT.bat
@echo off
goto:B
goto:eof
:A
echo A
goto :T
:B
echo B
goto :A
:T
echo T

效果如下

>batBAT

到此这篇关于批处理命令之函数传参和跳转详解的文章就介绍到这了,更多相关批处理命令内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • windows批处理中set命令的用法详解
  • Windows批处理(cmd/bat)常用命令汇总
  • window使用bat批处理文件执行cmd命令
  • bat批处理的基本命令和使用方法
  • Windows命令批处理的用法详解

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 DOS/BAT 批处理命令之函数传参和跳转详解 https://www.u-9.cn/jiaoben/dosbat/183107.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务