仅使用cmd运行程序时如何编辑程序的输出

时间:2018-08-16 14:56:12

标签: batch-file command-line cmd

我试图获取一个批处理文件来运行程序,并将输出以及每行的前置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)答案。也将接受一个解释如何以及为什么不可能实现的答案。

1 个答案:

答案 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