批处理脚本:如何在每行日志之前添加时间戳?

问题描述

我是批处理脚本的新手,我正在尝试创建一些可以使用 Tee-Object 查看终端输出和日志的东西。

这是工作代码

powershell %* ^| tee-object -Append -FilePath "something.log"

但是,我希望在附加到日志文件之前添加时间戳,但找不到任何此类脚本。

这是 shell 脚本中等效的工作代码

$* | while read line; do echo $line; echo "$(date) $line" >> something.log; done

解决方法

如果内容是文本行,可以添加时间戳:

%* ^| ForEach-Object { $(Get-Date).ToString() + ' ' + $_ } ^| Tee-Object ...

Tee-Object 与 UNIX/Linux 上的 tee 一样,旨在将相同的流发送到两个地方。不使用 Tee-Object,可以写入两个不同的流。

if (Test-Path -Path '.\teetime.log') { Remove-Item -Path '.\teetime.log' }
@('now','is','the','time') |
    ForEach-Object {
        $(Get-Date).ToString() + ' ' + $_ |
            Out-File -FilePath '.\teetime.log' -Encoding ascii -Append
        Write-Host $_
    }