23

有没有办法从里面为批处理文件重定向标准输出和标准错误。

我在想像

set STDOUT=stdout.log
echo Some text
a.exe
b.exe
c.exe

和和Some text的输出a.exe都在哪里b.exec.exestdout.log

这可能吗?

4

2 回答 2

35

为整个命令集合重定向一次比重定向(附加)每个单独的命令更有效。初始化重定向需要时间。对于一些重定向的命令可能并不明显,但如果在具有多次迭代的循环中完成,它可能会变得非常重要。

一种方法是将整个重定向命令块括在括号内,并在括号外重定向

>stdout.log 2>&1 (
  echo Some text
  a.exe
  b.exe
  c.exe
)

另一种选择是将您的命令放在子程序中并重定向 CALL

call :redirect >stdout.log 2>&1
exit /b

:redirect
echo Some text
a.exe
b.exe
c.exe
exit /b
于 2012-11-15T15:15:18.667 回答
8

是的,您需要将 stdout 重定向并附加到您的文件 ( 1>> %STDOUT%) 并将 stderr 连接到 stdout ( 2>&1):

set STDOUT=stdout.log
echo Some text 1>> %STDOUT% 2>&1
a.exe 1>> %STDOUT% 2>&1
b.exe 1>> %STDOUT% 2>&1
c.exe 1>> %STDOUT% 2>&1

@EitanT 正确地指出,您的问题并不一定意味着将 stderr 和 stdout 都写入同一个文件。因此,为了完整起见,这是一个写入单独文件的版本:

set STDOUT=stdout.log
set STDERR=stderr.log
echo Some text 1>> %STDOUT% 2>> %STDERR%
a.exe 1>> %STDOUT% 2>> %STDERR%
b.exe 1>> %STDOUT% 2>> %STDERR%
c.exe 1>> %STDOUT% 2>> %STDERR%
于 2012-11-15T14:05:50.950 回答