如何制作一个在启动批处理文件时不会自动触发的功能?
我得到了这段代码,当我运行它时,它会立即回显函数Exception
中的文本,即使我从未调用它。
_verifyWindowsVersion
它确实打印了“第一行”回声,但它也打印出“你的windows版Windows不支持”回声。
如果我不打电话,如何防止该功能运行?
答案 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
使用了一个漂亮的技巧来专门允许一个或多个变量逃脱。
技巧是在开始执行之前解释整行。这意味着retval
在42
清理之前已经变为endlocal
,并且在清理%1
(您传入的名称的变量)之后将正确设置goto :eof
。
所有pat1
行字面上都会到达文件的末尾,然后他们将退出当前级别。对于函数,这意味着返回调用者。对于主程序,这意味着退出,因此绕过所有功能。