在批处理程序中可以调用外部可运行程序,比如: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 请按任意键继续. . .