使用javacode添加datetime时,批处理文件无法正常工作

时间:2016-08-18 12:16:41

标签: java batch-file

我有以下批处理文件Java代码,我想在mylogs.txt中添加日期时间,任何人都可以帮助我,我不知道如何在Java批处理中添加日期时间。

 @echo off

    set Year=%DATE:~10,4%
    set Month=%DATE:~4,2%
    set Day=%DATE:~7,2%

    set Hour=%TIME:~0,2%
    set Minute=%TIME:~3,2%
    set Second=%TIME:~6,2%

    rem Modify this line to fit your time format
    set CurrentTime=%Year%-%Month%-%Day%_%Hour%_%Minute%_%Second%

    set JAVA_HOME=C:\jdk1.5.0_05

    set CLI_HOME=c:\projects\utds\applications\cli
    set CLI_LIB=%CLI_HOME%\lib

    set CLASSPATH=%CLI_LIB%\commons-logging.jar;%CLI_LIB%\commons-logging-api.jar
    set CLASSPATH=%CLASSPATH%;%CLI_LIB%\spring.jar;%CLI_LIB%\spring-core.jar;%CLI_LIB%\spring-support.jar;%CLI_LIB%\spring-remoting.jar
    set CLASSPATH=%CLASSPATH%;%CLI_LIB%\utds-infra.jar;%CLI_HOME%\src\conf\spring;%CLI_HOME%\src\conf
    set CLASSPATH=%CLASSPATH%;%CLI_LIB%\aopalliance.jar
    set CLASSPATH=%CLASSPATH%;%CLI_HOME%\dist\cli.jar;%JAVA_HOME%\jre\lib\ext\comm.jar

    set path=%JAVA_HOME%\bin;%path%

    rem > will simply overwrite the log file
    echo (%CurrentTime%) java -Dport=COM3 -DbaudRate=9600 -Dparser=lgCliParser -DappContext=applicationContext-service.xml com.utds.cli.service.comm.CallerIdListener > mylogs.txt

    pause

当我在文本文件中添加echo (%CurrentTime%)保存下面的数据时(这是错误的)

enter image description here enter image description here

 java -Dport=COM3 -DbaudRate=9600 -Dparser=lgCliParser -DappContext=applicationContext-service.xml` com.utds.cli.service.comm.CallerIdListener > mylogs.txt

当我删除echo (%CurrentTime%)时,其工作正常命令窗口仍然正常工作,当我调用命令窗口时显示获取事件并将结果保存在文本文件中。

 got message '001 : 1234567885' got message '001 : 1234567885 ->  101' {phoneNo=1234567885, handsetId=101}

我还希望日期时间为秒。我怎么做?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

使用环境变量DATETIME非常快。但它的缺点是日期和时间字符串的格式取决于当前用户的Windows区域和语言设置。因此,在一台计算机上为一个用户工作的东西不能在同一台或另一台计算机上为另一个用户工作。

例如命令行

@cls & @echo Date: %DATE% & @echo Time: %TIME%

在命令提示符窗口中执行,在我的计算机上输出我的区域设置:

Date: 19.08.2016
Time: 12:58:33,01

但是有一个命令可以使当前的本地日期时间始终采用区域和语言无关的格式:

wmic OS get LocalDateTime

命令wmic - Windows Management Instrumentation命令行实用程序 - 使用这些选项输出到我的计算机上的控制台两行(加上第三个空白行):

LocalDateTime
20160819125833.203000+120

日期/格式固定为YYYYMMDDHHmmss.microsecond,总是6位数加上当前± time offset to UTC,总是3位数。

可以轻松地将与地区无关的日期/时间字符串重新格式化为YYYY-MM-DD_HH_mm_ss之类的任何其他日期/时间格式,如下面的代码所示:

@echo off
for /F "skip=1 delims=." %%T in ('%SystemRoot%\System32\wbem\wmic.exe OS get LocalDateTime') do set "LocalDateTime=%%T" & goto ReformatDateTime
:ReformatDateTime
set "CurrentTime=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%_%LocalDateTime:~8,2%_%LocalDateTime:~10,2%_%LocalDateTime:~12,2%"

set "JAVA_HOME=C:\jdk1.5.0_05"

set "CLI_HOME=c:\projects\utds\applications\cli"
set "CLI_LIB=%CLI_HOME%\lib"

set "CLASSPATH=%CLI_LIB%\commons-logging.jar;%CLI_LIB%\commons-logging-api.jar"
set "CLASSPATH=%CLASSPATH%;%CLI_LIB%\spring.jar;%CLI_LIB%\spring-core.jar;%CLI_LIB%\spring-support.jar;%CLI_LIB%\spring-remoting.jar"
set "CLASSPATH=%CLASSPATH%;%CLI_LIB%\utds-infra.jar;%CLI_HOME%\src\conf\spring;%CLI_HOME%\src\conf"
set "CLASSPATH=%CLASSPATH%;%CLI_LIB%\aopalliance.jar"
set "CLASSPATH=%CLASSPATH%;%CLI_HOME%\dist\cli.jar;%JAVA_HOME%\jre\lib\ext\comm.jar"

set "PATH=%JAVA_HOME%\bin;%PATH%"

rem > will simply overwrite the log file
>"mylogs.txt" echo (%CurrentTime%) java -Dport=COM3 -DbaudRate=9600 -Dparser=lgCliParser -DappContext=applicationContext-service.xml com.utds.cli.service.comm.CallerIdListener

pause

好吧,对于第三行,我建议使用以下行,以YYYY-MM-DD HH:mm:ss格式创建当前日期/时间字符串,该字符串更易读,但不能用于文件/文件夹名称,因为时间字符串中的冒号。

set "CurrentTime=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2% %LocalDateTime:~8,2%:%LocalDateTime:~10,2%:%LocalDateTime:~12,2%"

使用wmic的另一个解决方案是运行此命令:

wmic OS get LocalDateTime /VALUE

选项/VALUE会导致输出格式不同:

LocalDateTime=20160819125833.203000+120

适用于此输出的批处理文件:

@echo off
for /F "tokens=2 delims==." %%T in ('%SystemRoot%\System32\wbem\wmic.exe OS get LocalDateTime /VALUE') do set "LocalDateTime=%%T"
set "CurrentTime=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%_%LocalDateTime:~8,2%_%LocalDateTime:~10,2%_%LocalDateTime:~12,2%"

set "JAVA_HOME=C:\jdk1.5.0_05"

set "CLI_HOME=c:\projects\utds\applications\cli"
set "CLI_LIB=%CLI_HOME%\lib"

set "CLASSPATH=%CLI_LIB%\commons-logging.jar;%CLI_LIB%\commons-logging-api.jar"
set "CLASSPATH=%CLASSPATH%;%CLI_LIB%\spring.jar;%CLI_LIB%\spring-core.jar;%CLI_LIB%\spring-support.jar;%CLI_LIB%\spring-remoting.jar"
set "CLASSPATH=%CLASSPATH%;%CLI_LIB%\utds-infra.jar;%CLI_HOME%\src\conf\spring;%CLI_HOME%\src\conf"
set "CLASSPATH=%CLASSPATH%;%CLI_LIB%\aopalliance.jar"
set "CLASSPATH=%CLASSPATH%;%CLI_HOME%\dist\cli.jar;%JAVA_HOME%\jre\lib\ext\comm.jar"

set "PATH=%JAVA_HOME%\bin;%PATH%"

rem > will simply overwrite the log file
>"mylogs.txt" echo (%CurrentTime%) java -Dport=COM3 -DbaudRate=9600 -Dparser=lgCliParser -DappContext=applicationContext-service.xml com.utds.cli.service.comm.CallerIdListener

pause

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • cls /?
  • echo /?
  • for /?
  • pause /?
  • rem /?
  • set /?
  • wmic /?
  • wmic os /?
  • wmic os get /?

注意:在将带有>的消息输出重定向到文本文件时,请避免文本和重定向操作echo之间的空格,因为此空间也会作为尾随空格写入文件。在大多数情况下,避免此尾随空间工作的一种简单方法是首先指定重定向运算符和文件名,然后使用文本写入echo,并将文本写入没有尾随空格的文件。