像批处理文件中的函数/方法一样?
有没有什么能够模仿像Java,C#等那样的方法?在批处理文件中有5行命令,这5行用在批处理文件中的多个位置。我无法使用goto,因为根据这5行创建的错误级别,我有不同的操作。我试着将5行放入批处理文件5lines.bat中,但原始批处理文件original.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被调用后的行?
配售的可重复使用的功能集成到一个单独的批处理文件将当然可以模拟一个功能。
问题是,您必须使用call
命令才能确保在第二个批处理文件执行完毕后控制权返回给调用者。
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
你可以尝试使用上this page
或者列出的例子,你可以把公共线到另一个批处理文件,从主一个
伟大的链接! (尽管我最终只是使用call 5lines.bat) – 2012-04-13 23:30:09
解决方案:
@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%
这里有一个“黑客”,这将让你有在批处理文件"anonymous" functions:
@echo off
setlocal
set "anonymous=/?"
:: calling the anonymous function
call :%%anonymous%% a b c 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语句是必需的。
只是为了完整性,还可以将参数传递给函数:
函数调用
call :myDosFunc 100 "string val"
函数体
:myDosFunc
echo. Got Param#1 %~1
echo. Got Param#2 %~2
goto :eof
完美,谢谢! – 2012-04-13 23:30:16