通过另一个批处理脚本调用带有标签的批处理脚本但不使用CALL命令

3
我发现一个cmd批处理脚本的有趣特性。问题是:这是文档中记录的特性,还是一个bug?(你知道,未经记录的意外特性就是一个bug :-) )
首先,我确定你理解使用CALL和不使用CALL调用脚本之间的区别:
Script.bat
call Script.bat

现在,我有一个批处理库tools.bat:
echo tools.bat ARGS: %1 %2 %3 %4
set LABEL=%1
shift /1
goto %LABEL%

:A
echo A ARGS: %1 %2 %3
goto :eof
:B
echo B ARGS: %1 %2 %3
goto :eof

我从另一个脚本中调用它:
@echo off
call :A 1 2 3
call :B 4 5 6
exit /b

:A
:B
tools.bat %*

奇怪但可能有用的行为是,最后一行直接跳转到tools.bat标签处,而不是跳转到tools.bat的开头。当我用CALL替换最后一行时,我必须重写脚本,因为使用CALL时这种意外的行为不起作用:
@echo off
call :A 1 2 3
call :B 4 5 6
exit /b

:A
call tools.bat :A %*
goto :eof
:B
call tools.bat :B %*
goto :eof

所以,这个功能有没有文档记录呢?它在Windows 7和Windows 10上都可用。

1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接