2

下面的代码我希望在命令窗口上打印出两行。为什么要打印3行?

@echo off


call:myDosFunc1 100 YeePEE
goto:yyy


:myDosFunc1    - here starts my function identified by it`s label
echo. it could do %~1 of things %~2.
:yyy



call:myDosFunc2 100 YeePEE
goto:ttt


:myDosFunc2   - here starts my function identified by it`s label
echo. it could do %~1 of things %~2.

:ttt
4

2 回答 2

3

删除该@echo off行并pause在末尾添加命令,您可以观察脚本所采用的流程。你的问题背后的原因是你没有从 回来:myDosFunc1,所以代码正在下降到myDosFunc2,意思:myDicFunc2是被调用了两次。

简单修复,将以下内容添加到您的myDosFunc1

:myDosFunc1    - here starts my function identified by it`s label
echo. it could do %~1 of things %~2.
goto:eof
:yyy

建议:像这样构建您的脚本以防止工作流程问题。

@echo off

call:myDosFunc1 100 YeePEE
call:myDosFunc2 100 YeePEE
exit /b 0

:myDosFunc1    - here starts my function identified by it`s label
echo. it could do %~1 of things %~2.
exit /b 0

:myDosFunc2   - here starts my function identified by it`s label
echo. it could do %~1 of things %~2.
exit /b 0
于 2013-11-07T22:58:45.410 回答
1

问题在于,与过程名称明确且到达过程末尾意味着返回CDelphi其他语言不同,批处理就像汇编程序一样,其中标签只是标记。达到标签无济于事 - 无论如何都要通过批量收费。到达文件结尾(或使用内置GOTO :EOF隐式返回或在返回堆栈耗尽时终止。EXIT /b是一个显式返回,也可以选择设置errorlevel.

于 2013-11-08T00:30:57.133 回答