Windows批处理脚本:将所有输出重定向到文件

时间:2013-03-11 19:24:53

标签: windows batch-file dacapo

我正在运行各种Java基准测试,并希望存档结果。我像这样执行(dacapo)基准:

C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%

我在一个参数中传递了基准类型,这就是%arg1%。

您可以看到我正在将输出重定向到文本文件。不幸的是,输出的第一行和最后一行仍然在控制台中打印,而不是打印在文本文件中:

===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====

特别是最后一行在文本文件中很重要:)

有强迫这种行为的技巧吗?

2 个答案:

答案 0 :(得分:53)

您必须重定向 STDOUT STDERR

command > logfile 2>&1

STDIN 是文件描述符#0, STDOUT 是文件描述符#1而 STDERR 是文件描述符#2。
就像“command> file”将 STDOUT 重定向到文件一样,您也可以将任意文件描述符重定向到彼此。 >&运算符在文件描述符之间重定向。因此,2 >& 1将所有 STDERR 输出重定向到 STDOUT

此外,请注意在指令末尾添加2>&1,因为在Windows上,重定向的顺序很重要,因为command 2>&1 > logfile将生成一个空文件,正如Dawid在评论中添加的那样。 / p>

答案 1 :(得分:5)

在命令中添加2>& 1:

 C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 

这会将STDERR重定向到STDOUT,然后重定向到您的文本文件。