像batch file中的函数/方法?
有没有什么模仿像Java,C#等知道它的方法? 我在batch file中有5行命令,这5行用在batch file中的多个位置。 我不能使用goto,因为根据这5行创build的错误级别,我有不同的操作。 我尝试把我的5行内batch file5lines.bat,但原始的batch fileoriginal.bat只调用5lines.bat,并不会执行5lines.bat后调用命令):这就是我的original.bat喜欢:
5lines.bat echo this gets never called, how to make sure this gets called?
在5lines.bat中没有退出或类似的东西! 如何确保5lines.bat被调用后的行?
将可重用的函数放入一个单独的batch file当然可以模拟一个函数。
问题是你必须使用call
命令来确保控制权在第二个batch file执行完毕后返回给调用者。
call 5lines.bat echo this will now get called
你可以使用call命令:
call:myDosFunc
然后这样定义函数:
:myDosFunc - here starts the function echo. here the myDosFunc function is executing a group of commands echo. it could do a lot of things goto:eof
来源: 批量function
解:
@ECHO OFF call:header Start Some Operation ... put your business logic here ... make sure EXIT below is present ... so you don't run into actual functions without the call call:header Operation Finished Successfully EXIT /B %ERRORLEVEL% :: Functions :header ECHO ================================================= ECHO %* ECHO ================================================= EXIT /B 0
在每个函数的末尾以及在函数定义开始之前,都要把EXIT / B放在重要的位置,在我的例子中是:
EXIT / B%ERRORLEVEL%
您可以尝试使用此页面上列出的示例
或者,您可以将通用行放入另一个batch file,您可以从主文件中调用该文件
有关编写可重复使用的batch file代码的另一个很好的教程,请参阅Richie Lawrence的优秀库 。
这里有一个“黑客”,可以让你在batch file中拥有“匿名”function :
@echo off setlocal set "anonymous=/?" :: calling the anonymous function call :%%anonymous%% abc 3>&1 >nul :: here the anonymous function is defined if "%0" == ":%anonymous%" ( echo( echo Anonymous call: echo %%1=%1 %%2=%2 %%3=%3 exit /b 0 )>&3 ::end of the anonymous function
匿名函数块应该放在调用语句之后,并且必须以退出语句结束
诀窍是CALL
内部使用GOTO
,然后返回到执行CALL
的行。 通过双重扩展GOTO帮助信息被触发(使用%%/?%%
参数),然后继续脚本。 但是完成后它会返回到CALL
这就是为什么if语句是需要的。