Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件无法一致地创建日志文件_Windows_Batch File_Cmd - Fatal编程技术网

Windows 批处理文件无法一致地创建日志文件

Windows 批处理文件无法一致地创建日志文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个批处理文件,它创建了一个日志文件,文件名后附加了日期和时间。此批处理文件设置为每天早上通过Windows任务计划程序运行一系列任务。每天早上脚本运行时,批处理文件将仅部分命名日志文件。它应该被命名为report\u log\u 2020-12-10\u 03-00-00.log,但时间并不总是被添加,结果是report\u log\u 2020-12-10\u(因此它甚至不是一个.log文件,而是一个没有扩展名的文件) 当我手动运行批处理脚本时,文件被正确创建。在Windows任务计划程

我有一个批处理文件,它创建了一个日志文件,文件名后附加了日期和时间。此批处理文件设置为每天早上通过Windows任务计划程序运行一系列任务。每天早上脚本运行时,批处理文件将仅部分命名日志文件。它应该被命名为
report\u log\u 2020-12-10\u 03-00-00.log
,但时间并不总是被添加,结果是
report\u log\u 2020-12-10\u
(因此它甚至不是一个.log文件,而是一个没有扩展名的文件)

当我手动运行批处理脚本时,文件被正确创建。在Windows任务计划程序下手动运行任务时,也会正确创建该文件。但是,当任务自己在早晨运行时,即文件名中不包含时间和.log。这是一种非常奇怪的行为,让我感到困惑。下面是我正在使用的代码

::Created: 08/18/20
::Updated: 12/09/20

@ECHO OFF

::Set date/time
SET LOGFILE=Logs\report_log_%date:~-4,4%-%date:~-10,2%-%date:~-7,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%.log
CALL :LOG >> %LOGFILE%
EXIT /B

:LOG

::Begin script
ECHO %date% %time%: ##### Refresh Begins #####

::Run Alteryx workflow
ECHO %date% %time%: Running Alteryx workflow...
CALL "C:\Program Files\Alteryx\bin\AlteryxEngineCmd.exe" "C:\Users\filepath\Workflow.yxmd"

::Replace Error Checking Files
ECHO %date% %time%: Replacing error checking file...
DEL "C:\Users\filepath\Error Check - Previous.xlsx"
RENAME "C:\Users\filepath\Error Check - New.xlsx" "Error Check - Previous.xlsx"

::Check for log file
ECHO %date% %time%: Checking if Oracle log exists...
PowerShell.exe -Command "& 'C:\Users\filepath\log_check.ps1'"

::End script
ECHO %date% %time%: ##### Refresh Complete #####

::PAUSE

::Finish
之后

时间
日期
格式取决于用户,并且可能根据流程运行的用户而有所不同。因此,时间可能包含数小时的前导空格,因此文件名在空格处被截断。


时间
日期
格式取决于用户,并且可能根据流程运行的用户而有所不同。因此,时间可能包含数小时的前导空格,因此文件名在空格处被截断。

加引号:
>“%LOGFILE%”
…查看此线程:@aschipfl感谢您的解决方案。它确实解决了这个问题。或者更准确地说,这有助于确定真正的问题是什么。一旦我将日志文件调用放在引号中,它就开始在文件名中正确显示,但显示命名中有一个前导空格。下面Magoo的回答删除了前导空格。加上引号:
>“%LOGFILE%”
…看看这个线程:@aschipfl谢谢你的解决方案。它确实解决了这个问题。或者更准确地说,这有助于确定真正的问题是什么。一旦我将日志文件调用放在引号中,它就开始在文件名中正确显示,但显示命名中有一个前导空格。下面Magoo的回答删除了前导空格。好的一点是,最好使用本地独立日期/时间
for/f“tokens=2 delims==”%%a in('wmic OS Get localdatetime/value')do…
添加到时间中的空格对于批处理文件没有完成命名是有意义的。然而,有时确实如此——仍然不知道为什么。因此
SET“LOGFILE=%LOGFILE:=0%”
将在初始
SET LOGFILE
之后。。。它通过
=0
消除了创建的空格,对吗?我想确保我了解它在做什么,这正是它应该做的。当然,还有一个尴尬的情况,日期格式可能被设置为不同的序列(m/y/d,d/m/y,y,m,d)或2位数或4位数的年份…@Magoo非常感谢您的帮助。你一针见血。时间确实有一个领先的空间。您提供的代码段将其替换为0,效果非常好。不过我有一个问题,时间或日期通常会有一个前导空格吗?我想我从来没有在其他地方见过这种情况(对我来说似乎有问题)。好的一点是,最好使用本地独立的日期/时间
for/f“tokens=2 delims==”%%a in('wmic OS Get localdatetime/value')do…
在时间中添加空格对于批处理文件没有完成命名是有意义的。然而,有时确实如此——仍然不知道为什么。因此
SET“LOGFILE=%LOGFILE:=0%”
将在初始
SET LOGFILE
之后。。。它通过
=0
消除了创建的空格,对吗?我想确保我了解它在做什么,这正是它应该做的。当然,还有一个尴尬的情况,日期格式可能被设置为不同的序列(m/y/d,d/m/y,y,m,d)或2位数或4位数的年份…@Magoo非常感谢您的帮助。你一针见血。时间确实有一个领先的空间。您提供的代码段将其替换为0,效果非常好。不过我有一个问题,时间或日期通常会有一个前导空格吗?我想我在其他任何地方都没有见过这种情况(而且对我来说似乎有问题)。
SET LOGFILE=Logs\report_log_%date:~-4,4%-%date:~-10,2%-%date:~-7,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%.log
SET "LOGFILE=%logfile: =0%"