Cmd重定向输出

时间:2015-03-01 18:11:44

标签: cmd redirect

我想运行(在cmd中启动):

java -server -Xms1024m -Xmx4096m -XX:PermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -jar FTBServer-1.7.10-1272.jar nogui

并将输出重定向到屏幕和文件,我得到了这个工作,但我也想要一个完全独立的错误文件,但这些错误也需要在日志文件中显示。

所以我让它重定向正常输出:echo %test% 1>> D:\Documenten\Bureaublad\test.txt
2>>&1添加错误。

如果我要添加2>> D:\Documenten\Bureaublad\test2.txt,错误将不会显示在第一个文件中。

这就是我总得到的:

@echo off
SET /P test=give input
echo %test% 1>> D:\Documenten\Bureaublad\test.txt 2>> D:\Documenten\Bureaublad\test2.txt 2>>&1
pause

它可以工作,但只将输出放在文件而不是屏幕上,并且不会将错误放在第一个和第二个文件中,只放在第一个文件中。

1 个答案:

答案 0 :(得分:0)

你无法做你想要的。给定的文件句柄(在本例中为stderr)只能重定向一次。当多个重定向放在同一个命令上时,最后一个规范就会胜出。

无法将stderr发送到文件,然后以某种方式将其合并到stdout流中 - 组合输出将被加扰。您可以做的最好的事情是将stdout和stderr合并为一个流,将其传输到tee中以将组合输出写入文件,然后使用另一个管道通过FINDSTR传递输出以某种方式过滤掉仅错误消息并重定向到它自己的文件。如果您无法通过内容识别错误消息,那么您就不幸了。

Tee不是批处理的标准命令,因此您需要第三方端口。或者你可以使用my hybrid JScript/batch TEE.BAT这个纯脚本在XP以后的任何Windows机器上本机运行。

为了演示,我将假设您的每条错误消息都出现在一行中,并以单词Error:开头。您必须调整搜索字符串以正确识别输出中的错误。

yourCommand 2>&1 | tee.bat output.log | findstr "^Error:" >output.err