我试图获取一个批处理文件来运行程序,并将输出以及每行的前置DateTime保存在日志文件中,该日志文件需要实时更新。由于我们只能使用cmd,因此受到限制,无法使用powershell。
我尝试使用:
(for /f "delims=" %%i in ('ConsoleApp2.exe') do echo %DATE% %TIME% %%i >> log.txt)
但这仅在程序完成运行后评估,并且还为所有输出提供相同的值。
我不知道该怎么做,请问有人可以解决吗?
编辑:
以前我们使用过:
ConsoleApp2.exe >> log.txt
程序运行时输出到日志文件,但是我不知道如何获取它来附加时间戳。
摘自评论(谢谢斯蒂芬)
setlocal enabledelayedexpansion
(for /f "delims=" %%i in ('ConsoleApp2.exe') do echo !TIME! %%i >> log.txt)
解决了使时间戳正确更新的问题,但是,我仍然无法实时获取输出(程序运行时)。
编辑: Lit的答案有效,但是我真的只需要一个cmd(不要在cmd中运行或运行Powershell)答案。也将接受一个解释如何以及为什么不可能实现的答案。
答案 0 :(得分:0)
这是另一种方式。对不起,我以前的回答。每个人都是正确的,cmd FOR循环将等待直到一切完成。希望不会。
=== bat1.bat(ConsoleApp2.exe替代以产生一些行)
@ECHO OFF
FOR /L %%a IN (1,1,3) DO (
ECHO line %%a
ping -n 3 localhost 1>NUL 2>&1
)
=== logger.ps1
$Input | ForEach-Object { "$(Get-Date) $_" }
===用法
CALL bat1.bat | powershell -NoProfile -File .\logger.ps1