155 votes

Comment puis-je faire écho et envoyer la sortie de la console dans un fichier dans un script bat?

J'ai un script batch qui exécute une tâche et envoie la sortie dans un fichier texte. Est-il possible d’afficher la sortie dans la fenêtre de la console?

Par exemple:

 c:\Windows>dir > windows-dir.txt
 

Existe-t-il un moyen d’afficher la sortie de dir dans la fenêtre de la console et de la placer dans le fichier texte?

Merci

240voto

jeb Points 26035

J'essaie d'expliquer la redirection un peu.

Vous rediriger l'un des dix cours d'eau avec de fichier> ou < fichier
Il est sans importance, si la redirection est avant ou après la commande, donc, ces deux lignes sont presque les mêmes.

dir > file.txt
> file.txt dir

La redirection dans cet exemple n'est qu'un raccourci pour 1>, cela signifie que le flux 1 (STDOUT) sera redirigé.
Ainsi, vous pouvez rediriger n'importe quel flux avec les préfixant le nombre comme 2> err.txt et il est également possible de rediriger les flux multiples en une seule ligne.

dir 1> files.txt 2> err.txt 3> nothing.txt

Dans cet exemple, la "sortie standard" qui sera en files.txt, de toutes les erreurs seront en err.txt et le stream3 va aller dans l'nothing.txt (DIR n'utilisez pas le volet 3).
Stream0 est STDIN
Stream1 est STDOUT
Stream2 est STDERR
Stream3-9 ne sont pas utilisés

Mais qu'advient-il si vous essayez de rediriger plusieurs fois le même cours d'eau?

dir > files.txt > two.txt

"Il peut y avoir seulement un", et c'est toujours le dernier!
C'est donc égale à dir > two.txt

Ok, il y a une possibilité supplémentaire, de rediriger un flux à un autre.

dir 1>files.txt 2>&1 

2>&1 redirige stream2 à stream1 et 1>files.txt redirige tous à files.txt.
Voici l'ordre important!

dir ... 1>nul 2>&1
dir ... 2>&1 1>nul

Sont différents, le premier redirige tous (STDOUT et STDERR) à NUL.
Mais la deuxième ligne redirige la sortie standard (STDOUT) à NUL, et STDERR vers le "vide" STDOUT.

Comme une conclusion, c'est évidemment pourquoi les échantillons de Otávio Décio et andynormancx ne peuvent pas travailler.

command > file >&1
dir > file.txt >&2

Les deux essayer de rediriger stream1 deux fois, mais "Il ne peut être seulement un", et c'est toujours le dernier.
Ainsi, vous obtenez

command 1>&1
dir 1>&2

Et dans le premier exemple de redirection de stream1 à stream1 n'est pas autorisé (et pas très utile).

j'espère que ça aide
jeb

36voto

atn Points 101

Utilisez simplement la version Windows de la commande UNIX tee (disponible sur http://unxutils.sourceforge.net ) de cette manière:

 mycommand > tee outpu_file.txt
 

Si vous avez également besoin de la sortie STDERR, utilisez ce qui suit.
Le 2>&1 combine la sortie STDERR dans STDOUT (le flux principal).

 mycommand 2>&1 | tee output_file.txt
 

13voto

Mark Pim Points 5910

Si vous n'avez pas besoin de la sortie en temps réel (c'est-à-dire pendant que le programme l'écrit), vous pouvez ajouter

 type windows-dir.txt
 

après cette ligne.

9voto

Tomas R Points 916

La solution qui a fonctionné pour moi était la suivante: dir> a.txt | tapez a.txt .

2voto

Otávio Décio Points 44200
command > file >&1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X