Batch file 当前日期和时间在0-9小时内未从Windows批处理文件添加到重定向输出文件名
当我希望从批处理文件执行的命令(使用命令行参数执行JAR)的输出被发送到名称中包含当前日期和时间的文件时,我遇到了一个问题 我的批处理文件的内容如下所示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:
@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指出这一点,这就是问题所在。删除尾随空格修复了“我的问题”。