我发现了cmd批处理脚本的一个有趣特性。问题是:它是一个文档化的特性,还是一个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的开头。当我将最后一行替换为调用时,我将不得不大幅重写脚本,因为对于调用,这种意外行为不起作用:
@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中都有效。
发布于 2019-11-30 18:38:40
这是一个已知的“黑客攻击”,但没有被microsoft记录下来。其中一个可能的用途是创建一个'libary‘脚本,在这个脚本中,您可以调用特定的函数-> https://stackoverflow.com/a/30170342/388389
https://stackoverflow.com/questions/59114834
复制相似问题