cmd重定向输出
Cmd redirect output
我想 运行(在 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
它有效,但只将输出输出到文件而不是屏幕,并且不会将错误放在第一个和第二个文件中,只放在第一个文件中。
你不能按照你的要求去做。给定的文件句柄(在本例中为 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
我想 运行(在 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
它有效,但只将输出输出到文件而不是屏幕,并且不会将错误放在第一个和第二个文件中,只放在第一个文件中。
你不能按照你的要求去做。给定的文件句柄(在本例中为 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