|
|
发表于 2011-5-23 22:06:04
|
显示全部楼层
10# plp626
怎么觉得楼上的用法如此怪异
原来是@()的在作怪
在call 不支持直接调用标签的时候
那时是MS-DOS为王的时代
就已经有了标准调用内部或外部的标签的做法
基本上采用下面的形式
1.简单的基本用法
@echo off
if [%1]==[$] goto %2
:sub1
rem some code
goto :end
:end
调用的时候采用
call %0 $ sub1
外部调用采用
call lib.bat $ sub1
2.在需要传递参数的时候
@echo off
if [%1]==[] goto :end
shift
shift
goto %0
:function1
echo %1+%2+%3
rem some code
goto :end
:end
调用的时候采用
call %0 $ func1 arg1 arg2 arg3
外部调用采用
call lib.bat $ func1 arg1 arg2 arg3
3.在需要返回结果值的时候
@echo off
if [%1]==[] goto :end
shift
shift
goto %0
:func2
rem some code
set _ret=%2-%1-%3
goto :end
:end
调用的时候仍然采用
call %0 $ func2 arg1 arg2 arg3
外部调用也是采用
call lib.bat $ func2 arg1 arg2 arg3
只不过多了使用 %_ret% 引用返回结果的语句罢了
4.到了WinNT时代
cmd功能强了限制少了
Call可以直接调用内部标签了
shift移位可以保留%0了
命令行参数也可以增强扩展了
标签名不再限制8个字符长度了
不过基本思想变化不大
@echo off
if [%1]==[$] shift/1&shift/1&goto %2
:function
rem some code
set _ret=%2-%1-%3
goto :end
:end
调用的时候仍然采用
call %0 $ func2 arg1 arg2 arg3
外部调用也是采用
call lib.bat $ func2 arg1 arg2 arg3
5.当然对于要求不严格的场合
用if not [%1]==[] goto %1跳转标签也是可以的 |
|