像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语句是需要的。