【批处理学习笔记】第二十四课:直接传递

简介: 直接传递参数,即在使用call命令时,不使用任何参数,在子函数或子批处理里面直接对主函数(也称父批处理)里面的变量进行修改。这跟汇编语言里面的参数传递方式类似。    直接传递参数举例:===============================================@echo ...

    直接传递参数,即在使用call命令时,不使用任何参数,在子函数或子批处理里面直接对主函数(也称父批处理)里面的变量进行修改。这跟汇编语言里面的参数传递方式类似。
    直接传递参数举例:
===============================================
@echo off
setlocal enabledelayedexpansion
set var=aCdehiM,?mnrstW y
echo %var%
call :deal
setlocal disabledelayedexpansion
set var=%var:?=!%
echo %var%
pause>nul
exit


:deal
set tm=!var!
set var=
for %%i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (
set var=!var!!tm:~%%i,1!
)
goto :eof
===============================================
    可以发现,当我们把变量var作为参数赋予子函数:deal后,子函数对var的值进行了修改;当子函数返回后,主函数里面的var的值就已经是子函数里面var被修改后的值了。
    该例子中,使用了本节课前面讲到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保证了var在for循环里面能够根据我们的意愿进行处理,后者保证了能够正确输出符号"!"。另外例子中还使用了命令set,利用set对字符串进行了处理。还有一个地方使用了语句goto :eof,该语句相当于C语言里面的return或汇编语言里面的RET,即子程序返回命令。需要说明的是,当子函数本身就在批处理文件的末尾的话,我们是可以省略这句话的,比如将此例的goto :eof删除是不会产生任何影响的。

目录
相关文章
|
前端开发
前端学习笔记202305学习笔记第二十五天-读写流组合使用
前端学习笔记202305学习笔记第二十五天-读写流组合使用
47 0
|
分布式计算 JavaScript 前端开发
✨从异步讲起,『函数』和『时间』该作何关系?
✨从异步讲起,『函数』和『时间』该作何关系?
|
Go
第71/90步《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第26课
今天学习《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第26课 变量、常量与作用域
56 0
|
Go
第73/90步《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第28课
今天学习《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第28课 函数
67 0
|
Go
第72/90步《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第27课
今天学习《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第27课 4种逻辑控制语句
92 0
|
Go
第74/90步《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第29课
今天学习《番外篇》第4章 Go语言二:变量、逻辑控制与函数 第29课 递归函数与闭包
63 0
|
自然语言处理
【逻辑思训练营】「假设法专题」20210626系列专题(1-5)
【逻辑思训练营】「假设法专题」20210626系列专题(1-5)
97 0
|
C语言
【批处理学习笔记】第二十六课:返回值
有些命令在执行之后将会返回一定的错误值(errorlevel),可以通过errorlevel的值判断命令执行的状况。这点类似于C语言里面的exit(num),num就是错误代码。    获取返回值errorlevel的方法就是,在执行命令后,立马调用返回值errorlevel,如echo %errorlevel%或者if %errorlevel%==1等命令。
714 0
|
C语言
【批处理学习笔记】第二十五课:间接传递
间接传递参数,即在使用call命令时,在其后面添加参数,形如call {[:label][ChildBatch]} Parameter1 Parameter2 ... ParameterN。这跟C语言里面传递参数的格式类似。
886 0
【批处理学习笔记】第二十九课:ASCII码
前面的例子中,我们已经使用过一次ASCII码了,也就是那个笑脸。ASCII码是图形化的符号,可以用来点缀我们的批处理的。    在cmd窗口中我们可以通过任意一个字符的ASCII码来输入该字符,比如Ctrl+G、Ctrl+N等,字母a-z对应ASCII码的1-26。
1056 0