Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 从.bat文件实时记录日志_Windows_Batch File_Windows 10 - Fatal编程技术网

Windows 从.bat文件实时记录日志

Windows 从.bat文件实时记录日志,windows,batch-file,windows-10,Windows,Batch File,Windows 10,.bat文件 FOR %%A in (*.css) DO ( @echo %date% %time% >>log.txt pause ) 总是在同一时间写入日志文件。 看起来%time%只计算了一次 如何实时写入日志文件? 使用Windows 10查看代码为何会出现这种情况,需要删除echo前面的“@”。执行的代码如下所示: FOR %A in (*.css) DO ( echo 30.03.2020 19:20:57,99 1>>log.txt pau

.bat文件

FOR %%A in (*.css) DO ( 
@echo %date% %time% >>log.txt
pause

) 
总是在同一时间写入日志文件。 看起来%time%只计算了一次

如何实时写入日志文件?
使用Windows 10查看代码为何会出现这种情况,需要删除echo前面的“@”。执行的代码如下所示:

FOR %A in (*.css) DO (
  echo 30.03.2020 19:20:57,99  1>>log.txt
  pause
)
因为括号()中的所有内容都被视为一行,所以在执行循环之前,变量date和time将被当前值替换

要为每个文件获得唯一的时间戳,您需要延迟变量的扩展,这可以通过许多不同的方式完成:

  • 调用输出命令:
    FOR %%A in (*.css) DO ( 
        call echo %%date%% %%time%% >>log.txt
        pause
    )
    
    然后执行的代码将与您最初想要编写的代码类似:
    FOR %A in (*.css) DO (
        call echo %date% %time%  1>>log.txt
        pause
    )
    
  • 另一种类似的可能性是使用call在循环外部的标签下执行代码:

    FOR %%A in (*.css) DO ( 
        call :printLogEntry
        pause
    )
    exit
    
    :printLogEntry
        echo %date% %time% >>log.txt
    exit /b
    
  • 当然,您可以使用delayedExpansion:

    setlocal enableDelayedExpansion
    FOR %%A in (*.css) DO ( 
        echo !date! !time! >>log.txt
        pause
    )
    

延迟变量的扩展,或使用
调用
。具体要更改什么?正如链接问题的公认答案中明确指出的那样,将
setlocal enabledelayedexpansion
添加到脚本顶部,然后将
%date%%time%
更改为
!日期!时间。谢谢,成功了。你可以写下这个作为答案