Redirect Windows cmd stdout and stderr to a single file

前端 未结 7 1769
醉梦人生
醉梦人生 2020-11-22 10:11

I\'m trying to redirect all output (stdout + stderr) of a DOS command to a single file:

C:\\>dir 1> a.txt 2> a.txt
The process cannot access the fil         


        
相关标签:
7条回答
  • 2020-11-22 11:00

    Background info from MSKB

    While the accepted answer to this question is correct, it really doesn't do much to explain why it works, and since the syntax is not immediately clear I did a quick google to find out what was actually going on. In the hopes that this information is helpful to others, I'm posting it here.

    Taken from MS Support KB 110930.


    From MSKB110930

    Redirecting Error Messages from Command Prompt: STDERR/STDOUT

    Summary

    When redirecting output from an application using the '>' symbol, error messages still print to the screen. This is because error messages are often sent to the Standard Error stream instead of the Standard Out stream.

    Output from a console (Command Prompt) application or command is often sent to two separate streams. The regular output is sent to Standard Out (STDOUT) and the error messages are sent to Standard Error (STDERR). When you redirect console output using the ">" symbol, you are only redirecting STDOUT. In order to redirect STDERR you have to specify '2>' for the redirection symbol. This selects the second output stream which is STDERR.

    Example

    The command dir file.xxx (where file.xxx does not exist) will display the following output:

    Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
    
    File Not Found
    

    If you redirect the output to the NUL device using dir file.xxx > nul, you will still see the error message part of the output, like this:

    File Not Found
    

    To redirect (only) the error message to NUL, use the following command:

    dir file.xxx 2> nul
    

    Or, you can redirect the output to one place, and the errors to another.

    dir file.xxx > output.msg 2> output.err
    

    You can print the errors and standard output to a single file by using the "&1" command to redirect the output for STDERR to STDOUT and then sending the output from STDOUT to a file:

    dir file.xxx 1> output.msg 2>&1
    
    0 讨论(0)
提交回复
热议问题