我发现一个cmd批处理脚本的有趣特性。问题是:这是文档中记录的特性,还是一个bug?(你知道,未经记录的意外特性就是一个bug :-) )
首先,我确定你理解使用CALL和不使用CALL调用脚本之间的区别:
现在,我有一个批处理库
我从另一个脚本中调用它:
奇怪但可能有用的行为是,最后一行直接跳转到
首先,我确定你理解使用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上都可用。