我有一个批处理脚本编译和运行一个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
之后,你正在返回调用:printDate
的call :exit
行:printDate
块再一次被处理,然后真正的goto:eof
行内:printDate
是脚本的真实结束。
这是Call
,而是需要使用GoTo
关键字,如下所示:
... REM call :exit Goto :Exit ... ... :exit call:printDate echo Done... REM goto:eof Exit