在调用块中启动文件

时间:2015-07-06 11:47:03

标签: batch-file

我制作了一个名为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而不是打开自己 有谁知道这是怎么发生的?

1 个答案:

答案 0 :(得分:0)

当您使用call命令时,会创建一个新的"批处理上下文" ,批处理文件中的代码会被重写,如果确定该上下文已由call :label创建,执行隐式goto :label

现在,从子例程内部直接调用批处理文件(如果相同或其他批处理文件不重要)但不使用call命令。这将创建一个批处理上下文,替换当前上下文,但不会清除以前的call :label情况。这会导致新的隐式goto :label

这用于实现"函数库" (你可以看到一个工作样本here

将您的Start_in_call.bat更改为call Start_in_call.bat