首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows批处理函数会被调用额外的时间。

Windows批处理函数会被调用额外的时间。
EN

Stack Overflow用户
提问于 2013-10-18 01:35:56
回答 2查看 861关注 0票数 1

我有一个批处理脚本,它编译并运行一个Java程序,当它这样做时,它会打印任务开始时的时间戳。我注意到:printDate函数在结束时被调用了一段时间,但是:exit应该在“完成.”之后结束脚本。是印出来的。

代码语言:javascript
复制
@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

这是我的输出

代码语言:javascript
复制
[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程序生成输出文件,脚本在编译和运行程序后生成输入并打印输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 01:44:49

:printDate过程被调用另一次,因为在调用:exit过程时没有完成执行,而是在:exit过程中调用:printDate,但是在echo Done之后,您将返回到call :exit行,因此:printDate块再被处理一次,而:printDate中的goto:eof行才是脚本的真正结束。

这就是Call的含义,相反,您需要使用GoTo关键字,如下所示:

代码语言:javascript
复制
...
REM call :exit
Goto :Exit
...

...
:exit
call:printDate
echo Done...
REM goto:eof
Exit
票数 1
EN

Stack Overflow用户

发布于 2019-02-05 10:13:24

始终使用Goto标签来终止您的主程序。

示例:

代码语言:javascript
复制
echo hello world<br>
call:doFirstThing<br>
call:doSecondThing<br>
<p>
Goto :FinalExit<br>
<p>
:doFirstThing<br>
echo in the first method<br>
goto:eof<br>
<p>
:doSecondThing<br>
echo in the second method<br>
goto:eof<br>
<p>
FinalExit<br>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19440161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档