Redirect stdout and stderr from inside a batch file

前端 未结 2 1062
夕颜
夕颜 2020-12-30 01:36

Is there a way to redirect stdout and stderr for a batch file from inside it.

I\'m imagining something like

set STDOUT=stdout.log
echo Some text
a.ex         


        
相关标签:
2条回答
  • 2020-12-30 02:30

    It is more efficient to redirect once for the entire collection of commands than it is to redirect (with append) each individual command. It takes time to intialize the redirection. It may not be noticable for a few redirected commands, but if done in a loop with many iterations, it can become quite significant.

    One method is to enclose the entire block of redirected commands within parentheses and redirect outside the parentheses

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

    Another option is to put your commands in a subroutine and redirect the CALL

    call :redirect >stdout.log 2>&1
    exit /b
    
    :redirect
    echo Some text
    a.exe
    b.exe
    c.exe
    exit /b
    
    0 讨论(0)
  • 2020-12-30 02:33

    Yes, you need to redirect and append stdout to your file (1>> %STDOUT%) and connect stderr to 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 correctly noted that your question doesn't necessarily imply writing both stderr and stdout into the same file. So for completeness, here's a version writing into separated files:

    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%
    
    0 讨论(0)
提交回复
热议问题