在批处理程序中可以调用外部可运行程序,比如:exe程序,也可调用其他批处理程序。但是不够方便,如果被调用的程序很多,就显得不够简明了,很繁琐。
在 Windows XP 中,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。
子程序调用格式:
call :label arguments子程序语法:
:label
command1
command2
......
commandn
goto :eof在子程序段中,参数 %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
请按任意键继续. . .