如何在批处理文件中使用函数?

时间:2017-09-18 12:39:19

标签: batch-file

如何制作一个在启动批处理文件时不会自动触发的功能?
我得到了这段代码,当我运行它时,它会立即回显函数Exception中的文本,即使我从未调用它。

_verifyWindowsVersion

它确实打印了“第一行”回声,但它也打印出“你的windows版Windows不支持”回声。

如果我不打电话,如何防止该功能运行?

1 个答案:

答案 0 :(得分:1)

cmd文件中的函数往往遵循以下结构,完成本地化范围:

:main
    @setlocal enableextensions enabledelayedexpansion
    @echo off

    call :outputPi

    call :setTo42 myvar
    echo Should be empty: %localvar%
    echo Should be 42: %myvar%

    endlocal
    goto :eof

:outputPi
    setlocal
    echo 3.14159
    endlocal
    goto :eof

:setTo42
    setlocal
    set localvar=99
    set retval=42
    endlocal&&set %1=%retval%
    goto :eof

这两个函数基本上是一个做某事的函数和一个返回值的函数。它们都有setlocal/endlocal,因此环境变化无法逃脱,setTo42使用了一个漂亮的技巧来专门允许一个或多个变量逃脱。

技巧是在开始执行之前解释整行。这意味着retval42清理之前已经变为endlocal,并且在清理%1(您传入的名称的变量)之后将正确设置goto :eof

所有pat1行字面上都会到达文件的末尾,然后他们将退出当前级别。对于函数,这意味着返回调用者。对于主程序,这意味着退出,因此绕过所有功能。