我有一个启动服务器的批处理脚本。然后,该服务器将其日志打印到stdout和stderr的情况下。
我想将stdout和stderr重定向到TEE命令以拆分输出。使用Unxutils的tee
命令,这很好。
但是,为了使我的应用程序便携
我编写了一个批处理脚本,该脚本读取了该答案中建议的stdout(2. CodeBlock(。
这有效,但仅适用于重定向的Stdout,而不是用于stderr。
注意:文件和命令行中缺少STDERR的输出。
我该如何读这两个流?
我如何重定向输出(%是服务器,%2是我希望日志的文件(?
%1 2>&1 | %~dp0tee.bat -a %2
这正常工作(因为它称为unxutils,而不是我的批处理脚本(:
%1 2>&1 | tee -a %2
我如何读取tee.bat
中的输入:
for /F "tokens=*" %%a in ('findstr /n $') do (
set "line=%%a"
setlocal EnableDelayedExpansion
set "line=!line:*:=!"
echo(!line!
if %append%==true (
echo(!line! >> %output%
) else (
echo(!line! > %output%
)
endlocal
)
PowerShell具有Tee-Object
CMDLET。$Input
变量接收stdin。
echo asf 2>&1 | powershell -NoLogo -NoProfile -Command "$Input | Tee-Object -FilePath './tee.txt'"
另请参见:https://stackoverflow.com/a/38668360/447901