我制作了一个名为Start_in_call.bat
的
@echo off
title Start in Call
echo Start Script
echo Parameters : [%0 %1 %2]
call :label1
echo End of Script
pause
exit
:label1
echo Start of Label1
echo Parameters : [%0 %1 %2]
pause
Start_in_call.bat rem qwe
echo End of Label1
goto :EOF
我希望脚本以rem qwe
作为参数
来打开
我运行了文件,这是输出:
Start Script
Parameters : ["S:\alot\of\folders\Start_in_call.bat"]
Start of Label1
Parameters : [:label1 ]
Press any key to continue . . .
Start of Label1
Parameters : [Start_in_call.bat rem qwe]
Press any key to continue . . .
Start of Label1
Parameters : [Start_in_call.bat rem qwe]
Press any key to continue . . .
我注意到脚本会执行某种goto label1
而不是打开自己
有谁知道这是怎么发生的?
答案 0 :(得分:0)
当您使用call
命令时,会创建一个新的"批处理上下文" ,批处理文件中的代码会被重写,如果确定该上下文已由call :label
创建,执行隐式goto :label
。
现在,从子例程内部直接调用批处理文件(如果相同或其他批处理文件不重要)但不使用call
命令。这将创建一个批处理上下文,替换当前上下文,但不会清除以前的call :label
情况。这会导致新的隐式goto :label
这用于实现"函数库" (你可以看到一个工作样本here)
将您的Start_in_call.bat
更改为call Start_in_call.bat
。