Rediriger le stdout et le stderr de Windows cmd vers un seul fichier

J'essaie de rediriger toutes les sorties (stdout + stderr) d'une commande [DOS][1] vers un seul fichier :

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

Est-ce possible, ou dois-je simplement rediriger vers deux fichiers distincts ?

[1] : http://en.wikipedia.org/wiki/DOS

Solution

Vous voulez :

dir > a.txt 2>&1

La syntaxe 2>&1 redirigera 2 (stderr) vers 1 (stdout). Vous pouvez également masquer les messages en les redirigeant vers NUL, [plus d'explications et d'exemples sur MSDN][1].

[1] : https://support.microsoft.com/en-us/help/110930/redirecting-error-messages-from-command-prompt-stderr-stdout

Commentaires (9)

La réponse d'Anders Lindahl est correcte, mais il faut noter que si vous redirigez stdout vers un fichier et que vous voulez également rediriger stderr, vous DEVEZ vous assurer que 2>&1 est spécifié APRÈS la redirection 1>, sinon cela ne fonctionnera pas.

REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt
Commentaires (14)

Je viens de hacher la réponse comme @Anders vient de la poster, mais...

Depuis mon aide Windows, j'ai fait une recherche sur la redirection (URL [ms-its:C:\WINDOWS\Help\ntcmds.chm::/redirection.htm][1]).

Vous pouvez également vous renseigner sur >> et | (pipe).

[1] : http://ms-its:C:\WINDOWS\Help\ntcmds.chm::/redirection.htm

Commentaires (0)