如何在BAT脚本中回显控制台输出并将其发送到文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (179)

我有一个批处理脚本,它执行任务并将输出发送到文本文件。是否也有一种方法可以在控制台窗口中显示输出?

例如:

c:\Windows>dir > windows-dir.txt

是否有一种方法可以使dir在控制台窗口中显示,并将其放入文本文件中?

提问于
用户回答回答于

如果重定向是在命令之前或之后,那么这并不重要,因此这两行几乎是相同的。

dir > file.txt
> file.txt dir

此示例中的重定向仅是1>,这意味着流1(STDOUT)将被重定向。

这样,就可以重定向任何流,并在前面加上如下所示的数字2>err.txt它还允许在一行中重定向多个流。

dir 1> files.txt 2> err.txt 3> nothing.txt

在本例中,“标准输出”将进入files.txt,所有错误都将在err.txt中,而流3将进入Nothing.txt(DIR不使用流3)

但是,如果尝试多次重定向相同的流,会发生什么情况呢?

dir > files.txt > two.txt

“只能有一个”,而且永远是最后一个!

所以它等于DIR>2.txt

好的,有一种额外的可能性,将流重定向到另一个流。

dir 1>files.txt 2>&1 

2>1将流2重定向到流1和1>files.txt重定向到files.txt

这里的命令很重要!

dir ... 1>nul 2>&1
dir ... 2>&1 1>nul

第一个将所有(STDOUT和STDERR)重定向到NUL,

但是第二行将STDOUT重定向到NUL和STDERR到“空”STDOUT。

作为一个结论,很明显,OTávio Décio和andynormancx的例子不能工作。

command > file >&1
dir > file.txt >&2
command 1>&1
dir 1>&2

用户回答回答于

只需使用UNIXTEE命令的Windows版本

mycommand > tee outpu_file.txt

如果还需要STDERR输出,则使用以下命令。

2>&1将STDERR输出组合到STDOUT(主流)中。

mycommand 2>&1 | tee output_file.txt

扫码关注云+社区