Windows 从.bat文件实时记录日志
.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
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%
更改为!日期!时间代码>。谢谢,成功了。你可以写下这个作为答案