Batch file 从另一个批处理脚本调用带有标签的批处理脚本而不调用

Batch file 从另一个批处理脚本调用带有标签的批处理脚本而不调用,batch-file,cmd,Batch File,Cmd,我发现cmd批处理脚本有一个有趣的特性。 问题是:这是一个文档化的特性,还是一个bug?(您知道,未记录的意外功能是一个bug:-)) 对于start,我确保您理解使用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

我发现cmd批处理脚本有一个有趣的特性。 问题是:这是一个文档化的特性,还是一个bug?(您知道,未记录的意外功能是一个bug:-))

对于start,我确保您理解使用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
的开头。当我用一个调用替换最后一行时,我必须重写脚本,因为在调用中,这种意外行为不起作用:

@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

那么,这个特性是否有文档记录?它在WIn7和Win10中都能工作。

这是一个已知的“黑客”,但微软没有记录在案。 其中一个可能的用法是创建一个“库”脚本,您可以在其中调用特定函数->