从批处理文件中重定向stdout和stderr

sas*_*alm 17 stdout batch-file stderr

有没有办法从它内部重定向stdout和stderr批处理文件.

我在想象类似的东西

set STDOUT=stdout.log
echo Some text
a.exe
b.exe
c.exe
Run Code Online (Sandbox Code Playgroud)

如果双方Some text和输出a.exe,b.exec.exe会去stdout.log

这可能吗?

dbe*_*ham 30

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

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

>stdout.log 2>&1 (
  echo Some text
  a.exe
  b.exe
  c.exe
)
Run Code Online (Sandbox Code Playgroud)

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

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

:redirect
echo Some text
a.exe
b.exe
c.exe
exit /b
Run Code Online (Sandbox Code Playgroud)


zb2*_*226 6

是的,您需要重定向并将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
Run Code Online (Sandbox Code Playgroud)

@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%
Run Code Online (Sandbox Code Playgroud)