Windows批处理函数被调用一个额外的时间

我有一个批处理脚本编译和运行一个Java程序,因为它正在这样做,它打印任务开始的时间戳。 我注意到:printDate函数在最后被称为额外的时间,但是:exit应该在打印“完成…”之后结束脚本。

 @echo off set PRGM=Foo cls call :printDate echo Compiling... javac %PRGM%.java call :printDate echo Executing... java %PRGM% call :printDate echo Results... type output.txt call :exit :: ---------------------------------------------------------- :: Functions :: ---------------------------------------------------------- :printDate for /f "tokens=2-4 delims=/ " %%a in ('echo %DATE%') do (set mydate=%%c/%%a/%%b) for /f "tokens=1-3 delims=/:./ " %%a in ('echo %TIME%') do (set mytime=%%a:%%b:%%c) echo|set /p=[%mydate% %mytime%] goto:eof :exit call:printDate echo Done... goto:eof 

这是我的输出

 [2013/10/17 21:26:11] Compiling... [2013/10/17 21:26:12] Executing... [2013/10/17 21:26:12] Results... 2 6 6 5 [2013/10/17 21:26:12] Done... [2013/10/17 21:26:12] 

编辑

如果有人有兴趣,这是我的工作脚本: http : //pastebin.com/xfwStvNK 。 我的Java程序生成输出文件,脚本生成input并在编译和运行程序后打印输出。

:printDate过程又被调用了,因为在调用:exit :printDate时候你并没有完成执行过程,而是在:exit :printDate中调用了:printDate ,但是在echo Done之后,你正在返回调用:printDatecall :exit:printDate块再一次被处理,然后真正的goto:eof行内:printDate是脚本的真实结束。

这是Call ,而是需要使用GoTo关键字,如下所示:

 ... REM call :exit Goto :Exit ... ... :exit call:printDate echo Done... REM goto:eof Exit