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

Nic*_*las 30 windows batch-file dacapo

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

C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%
Run Code Online (Sandbox Code Playgroud)

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

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

===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====
Run Code Online (Sandbox Code Playgroud)

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

是否有强制这种行为的技巧?

Zac*_*gle 55

您必须重定向STDOUTSTDERR.

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在评论中添加的那样.

  • STDIN是文件描述符#0.STDOUT是文件描述符#1.STDERR是文件描述符#2.就像"command> file"将STDOUT重定向到文件一样,您也可以将任意文件描述符重定向到彼此.">&"运算符在文件描述符之间重定向.因此,"2>&1"将所有STDERR输出重定向到STDOUT. (8认同)
  • 2>&1甚至意味着什么?说它不直观的语法将是对最高阶的赞美. (2认同)

小智 5

在命令中添加2>&1:

 C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 
Run Code Online (Sandbox Code Playgroud)

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