Ανακατεύθυνση των stdout και stderr των Windows cmd σε ένα ενιαίο αρχείο

Προσπαθώ να ανακατευθύνω όλη την έξοδο (stdout + stderr) μιας εντολής DOS σε ένα μόνο αρχείο:

C:\>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.

Είναι δυνατόν ή θα πρέπει να ανακατευθύνω σε δύο ξεχωριστά αρχεία;

Λύση

Θέλετε:

dir > a.txt 2>&1

Η σύνταξη 2>&1 θα ανακατευθύνει το 2 (stderr) στο 1 (stdout). Μπορείτε επίσης να αποκρύψετε μηνύματα ανακατευθύνοντας σε NUL, περισσότερες εξηγήσεις και παραδείγματα στο MSDN.

Σχόλια (9)

Η απάντηση του Anders Lindahl'είναι σωστή, αλλά θα πρέπει να σημειωθεί ότι αν ανακατευθύνετε το stdout σε ένα αρχείο και θέλετε να ανακατευθύνετε και το stderr, τότε ΠΡΕΠΕΙ να βεβαιωθείτε ότι το 2>&1 καθορίζεται ΜΕΤΑ την ανακατεύθυνση 1>, διαφορετικά δεν θα λειτουργήσει.

REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt
Σχόλια (14)

Μόλις έκοψα την απάντηση όπως την έστειλε ο @Anders, αλλά...

Από τη βοήθεια των Windows, έψαξα για ανακατεύθυνση (URL ms-its:C:\WINDOWS\Help\ntcmds.chm::/redirection.htm).

Ίσως να θέλετε να διαβάσετε και για τα >> και | (pipe).

Σχόλια (0)