Batch file 当前日期和时间在0-9小时内未从Windows批处理文件添加到重定向输出文件名

Batch file 当前日期和时间在0-9小时内未从Windows批处理文件添加到重定向输出文件名,batch-file,Batch File,当我希望从批处理文件执行的命令(使用命令行参数执行JAR)的输出被发送到名称中包含当前日期和时间的文件时,我遇到了一个问题 我的批处理文件的内容如下所示 @ECHO OFF SET HOUR=%time:~0,2% SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2% SET dtStamp24=%date:~-4%%date:~4,2%%date:

当我希望从批处理文件执行的命令(使用命令行参数执行JAR)的输出被发送到名称中包含当前日期和时间的文件时,我遇到了一个问题

我的批处理文件的内容如下所示

    @ECHO OFF


    SET HOUR=%time:~0,2%

    SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2% 
    SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%

    if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)

    echo %dtStamp%

    java -Xmx1024M -jar ..\lib\My.jar JobName Param1>\myfolder\\logs\process_EST.%dtStamp%.log
当我在0-9小时之间执行批处理文件时,虽然
echo%dtStamp%
给出了正确的值,比如
20180718_020849
,但是JAR执行失败,因为由于某种原因,
%dtStamp%
的值在java命令上没有被正确替换,并且导致
.log
被视为
My.JAR
的第二个参数。 但是,在10到23个小时内,同一批处理文件工作得非常好

在这方面的任何帮助都将不胜感激


谢谢

您可以将命令存储到变量中,然后调用它:

SET "exec=java -Xmx1024M -jar ..\lib\My.jar JobName Param1>\myfolder\logs\process_EST.%dtStamp%.log"

CALL %exec%

我建议您简化整个过程,并使用可靠的方法设置日期戳,该方法不受用户或地区设置的影响:

@Echo关闭
设置“dtStamp=”
对于/F“Tokens=1-6Delims=/:”%%A In('RoboCopy/NJH/L“\\\\\”Null)
)如果未定义dtStamp,则不设置“dtStamp=%%A%%B%%C\%%D%%E%%F”
然后,您可以使用
%dtStamp%.log将
Java
命令行放在它下面,而不管脚本在一天中的什么时候运行

在您的行业中:

SET dtStamp9=%date:~-4%%日期:~4,2%%日期:~7,2%\u 0%时间:~1,1%%时间:~3,2%%时间:~6,2%
有一个尾随空格,但在行中:

SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%\uu%time:~0,2%%time:~3,2%%time:~6,2%
没有

该空间会导致线路出现问题:

java-Xmx1024M-jar..\lib\My.jar作业名Param1>\myfolder\\logs\process\u EST.%dtStamp%.log
因为
.log
被视为另一个参数,因为前面有空格

要解决这个问题,您当然可以删除空间

但是,您可以采取其他措施来避免此类问题:

  • 使用带引号的
    set
    语法,如
    set“VAR=Value”
    ,因此尾随空格不再成为值的一部分,引号也不再成为值的一部分
  • 引用日志文件路径以保护此类包含空间
因此,应用于您的代码意味着:

@ECHO关闭
设置“小时=%time:~0,2%”
设置“dtStamp9=%date:~-4%%日期:~4,2%%日期:~7,2%\u 0%时间:~1,1%%时间:~3,2%%时间:~6,2%”
设置“dtStamp24=%date:~-4%%日期:~4,2%%日期:~7,2%\uu00%时间:~0,2%%时间:~3,2%%时间:~6,2%”
如果“%HOUR:~0,1%”==“(设置“dtStamp=%dtStamp9%”)其他(设置“dtStamp=%dtStamp24%”)
回显%dtStamp%
java-Xmx1024M-jar.。\lib\My.jar“JobName Param1>”\myfolder\logs\process\u EST.%dtStamp%.log

SET dtStamp9=…
命令行中有一个尾随空格,它成为值的一部分…感谢@aschipfl指出这一点,这就是问题所在。删除尾随空格修复了“我的问题”。