【发布时间】:2012-11-04 03:23:15
【问题描述】:
有没有办法从里面为批处理文件重定向标准输出和标准错误。
我在想象类似的东西
set STDOUT=stdout.log
echo Some text
a.exe
b.exe
c.exe
Some text 以及 a.exe、b.exe 和 c.exe 的输出都将转到 stdout.log
这可能吗?
【问题讨论】:
标签: batch-file stdout stderr
有没有办法从里面为批处理文件重定向标准输出和标准错误。
我在想象类似的东西
set STDOUT=stdout.log
echo Some text
a.exe
b.exe
c.exe
Some text 以及 a.exe、b.exe 和 c.exe 的输出都将转到 stdout.log
这可能吗?
【问题讨论】:
标签: batch-file stdout stderr
是的,您需要将标准输出重定向并附加到您的文件 (1>> %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%
【讨论】:
stderr 重定向到stdout...如果您愿意,可以将它们重定向到单独的日志。
为整个命令集合重定向一次比重定向(附加)每个单独的命令更有效。初始化重定向需要时间。对于一些重定向的命令可能并不明显,但如果在循环中执行多次迭代,它可能会变得非常重要。
一种方法是将整个重定向命令块括在括号内,并在括号外重定向
>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
【讨论】: