1

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プログラムは出力ファイルを生成し、スクリプトは入力を生成し、プログラムをコンパイルして実行した後に出力を出力します。

4

2 に答える 2

1

:printDateプロシージャを呼び出すときに実行を終了しないため、プロシージャはもう一度呼び出されます。プロシージャ内で:exit呼び出していますが、行に戻った後、ブロックがもう一度処理され、実際にはその行がスクリプトの本当の終わり。:printDate:exitecho Donecall :exit:printDategoto:eof:printDate

それが a の意味です。代わりに、次のようにキーワードCallを使用する必要があります。GoTo

...
REM call :exit
Goto :Exit
...

...
:exit
call:printDate
echo Done...
REM goto:eof
Exit
于 2013-10-18T01:44:49.820 に答える