定义子程序

目录

在批处理程序中可以调用外部可运行程序,比如:exe程序,也可调用其他批处理程序。但是不够方便,如果被调用的程序很多,就显得不够简明了,很繁琐。

在 Windows XP 中,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。

子程序调用格式:

call :label arguments

子程序语法:

:label
command1
command2
......
commandn
goto :eof

子程序参数 %0

在子程序段中,参数 %0 指标签 :label。实例:

@echo off
call :sub 10
goto end
rem 子程序

:sub
echo arg0=%0 arg1=%1
goto :eof

:end
pause

输出结果:

C:\Users\Administrator\Desktop> test.bat
arg0=:sub arg1=10
请按任意键继续. . .

子程序放置位置

子程序一般放在最后,并且注意在主程序最后要加上 exit 或跳转语句,避免错误的进入子过程。实例:

@echo off
call :sub 10

rem 子程序
:sub
echo arg0=%0 arg1=%1
goto :eof

输出结果:

C:\Users\Administrator\Desktop>test.bat
arg0=:sub arg1=10
arg0=test.bat arg1=

上述实例,在主程序后面并没有添加 exit 或者跳转语句,导致子程序被执行了两次。正确的写法如下:

@echo off
call :sub 10
goto end

rem 子程序
:sub
echo arg0=%0 arg1=%1
goto :eof

:end
pause

输出结果:

C:\Users\Administrator\Desktop> test.bat
arg0=:sub arg1=10
请按任意键继续. . .

子程序的变量

子程序和主程序中的变量都是全局变量,其作用范围都是整个批处理程序。实例:在子程序中设置了 val 变量,然后在主程序中访问。

@echo off
call :sub 10
echo %val%
goto end

rem 子程序
:sub
echo sub program
set val=hello sub
goto :eof

:end
pause

输出结果:

C:\Users\Administrator\Desktop> test.bat
sub program
hello sub
请按任意键继续. . .

子程序传参

传至子程序的参数在 call 语句中指定,在子程序中用 %1、%2 至 %9 的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量。

实例:定义一个子程序,向子程序传递参数。子程序则把传递的参数放入到变量中。

@echo off
call :sub return 你好
echo 子程序返回值:%return%
pause
exit

:sub
set %1=%2
goto :eof

输出结果:

C:\Users\Administrator\Desktop> test.bat
子程序返回值:你好
请按任意键继续. . .

上面实例中,“call :sub return 你好” 语句中 call 为关键字;:sub 为子程序名称;return 是一个变量名,将传递给子程序,用来存放参数“你好”;而 “你好” 也是一个参数,同样传递给子程序。上面实例,实际执行如下:

@echo off
call :sub
echo 子程序返回值:%return%
pause
exit

:sub
set return=你好
goto :eof

实例

实例:要求用户输入一个大于1的数字,然后使用子程序计算 1,2,3,4,.....n 的总和,其中:n为用户输入的数字。如下:

@echo off
set sum=0
set count=1
set /p maxValue=输入一个数字:

rem 调用子程序
call :sub sum %maxValue%
echo 数据求和结果:%sum%
pause
exit

rem 子程序
:sub
set /a %1=%1+%count%
if %count% leq %2 (
    set /a count=%count%+1
    goto sub
)
goto :eof

输出结果:

C:\Users\Administrator\Desktop> test.bat
输入一个数字:10
数据求和结果:66
请按任意键继续. . .
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号