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

Windows批处理脚本:将所有输出重定向到文件,windows,batch-file,dacapo,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 =====

我正在运行各种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>&1添加到您的命令中:

 C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 
这将把STDERR重定向到STDOUT,然后再重定向到您的文本文件。

您必须重定向STDOUT和STDERR

命令>日志文件2>&1

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


此外,注意在指令末尾添加
2>&1
,因为在Windows上,重定向的顺序很重要,因为
命令2>&1>日志文件将生成一个空文件,正如Dawid在注释中添加的那样。

2>&1甚至是什么意思?如果说它的语法不直观,那是对最高阶语法的补充。STDIN是文件描述符#0。STDOUT是文件描述符#1。STDERR是文件描述符#2。正如“命令>文件”将标准输出重定向到文件一样,您也可以将任意文件描述符重定向到彼此。“>&”运算符在文件描述符之间重定向。所以,“2>&1”会将所有的STDERR输出重定向到STDOUT。非常感谢你,扎克,这让它不再神秘了@ZachRiggle投了赞成票,但是你能补充一下你对STDIN/STDERR的评论和对答案的解释吗?我认为这是非常有用的信息!在windows上,重定向的顺序很重要,因为
命令2>&1>日志文件
将生成空文件