436 votes

Afficher la sortie de l'invite de commande Windows et la rediriger vers un fichier

Comment puis-je exécuter une application en ligne de commande dans l'invite de commande de Windows et faire en sorte que la sortie soit affichée et redirigée vers un fichier en même temps ?

Si, par exemple, je lance la commande dir > test.txt ceci redirigerait la sortie vers un fichier appelé test.txt sans afficher les résultats.

Comment pourrais-je écrire une commande pour afficher la sortie et rediriger la sortie vers un fichier dans l'invite de commande de Windows, de manière similaire à la commande tee sur Unix ?

72 votes

Et s'il vous plaît, arrêtez de l'appeler MSDOS ! Les similitudes entre cmd.exe et cette mort cérébrale qu'est command.com sont minuscules, et se réduisent de plus en plus.

0 votes

Aucun de ces éléments ne fonctionne si l'on a une application console qui charge une dll qui produit du texte. Le texte de l'application principale est redirigé vers un fichier, mais pas la sortie de la dll, qui continue à s'afficher dans la fenêtre de la console. Je n'ai trouvé AUCUN moyen de capturer le texte de la dll.

203voto

Saxon Druce Points 9404

Pour développer réponse de davor vous pouvez utiliser PowerShell comme ceci :

powershell "dir | tee test.txt"

Si vous essayez de rediriger la sortie d'un exe dans le répertoire courant, vous devez utiliser .\ sur le nom du fichier, par exemple :

powershell ".\something.exe | tee test.txt"

11 votes

C'est la réponse la plus proche : cela fonctionne avec l'installation par défaut, car PS est déjà présent sur la plupart des machines et, surtout, des serveurs.

1 votes

C'est la meilleure réponse ! Simple et fonctionne "out of the box".

0 votes

Cela fonctionne, mais le fichier ne contiendra pas tous les résultats.

144voto

Tomas R Points 916

J'ai pu trouver une solution pour rediriger la sortie vers un fichier. et ensuite à la console :

dir > a.txt | type a.txt

dir est la commande dont la sortie doit être redirigée, a.txt un fichier où stocker la sortie.

118 votes

Cela répond à la réponse, mais sort les données après la fin de la commande dir plutôt qu'au moment où les données sont produites.

11 votes

Cela fonctionnera, mais vous serez bloqué si la commande attend une entrée de stdin.

5 votes

J'aime cette réponse simple ! J'ai découvert qu'un & au lieu d'un | est nécessaire pour la sortie de certaines commandes, telles que ping o 7z.exe

106voto

Brian Rasmussen Points 68853

Il existe un portage Win32 du programme Unix tee qui fait exactement cela. Voir http://unxutils.sourceforge.net/ ou http://getgnuwin32.sourceforge.net/

18 votes

Le lien renvoie à une implémentation Windows de la commande Unix Tee, qui fonctionne donc sous Windows.

3 votes

Oui, je vote pour la réponse et le commentaire. En fait, je préférerais CygWin car il a tout, mais certaines personnes préfèrent les outils non DLL qu'ils peuvent choisir.

3 votes

De nombreux utilitaires Unix sont également portés par le projet GnuWin32, cf. gnuwin32.sourceforge.net .

58voto

davor Points 1038

Regarde ça : wintee

Pas besoin de cygwin.

J'ai cependant rencontré et signalé quelques problèmes.

Vous pouvez également vérifier unxutils parce qu'il contient tee (et pas besoin de cygwin), mais attention, les EOL de sortie sont de type UNIX ici.

Enfin, si vous disposez de PowerShell, vous pouvez essayer Tee-Object. Type get-help tee-object dans la console PowerShell pour plus d'informations.

4 votes

Pourquoi ce vote négatif ? 95% des réponses ici ont une chose en commun : la sortie n'est redirigée qu'après la fin de la commande initiale : lisez les commentaires. Utilitaire UNIX tee les sorties en temps réel. wtee a la même fonctionnalité. Si les bogues ne vous dérangent pas, il fera très bien l'affaire.

1 votes

C'est la seule solution qui fonctionne pour moi, n'ayant pas Powershell > 4.0. Bravo !

0 votes

Cela devrait être la réponse acceptée. wtee travaille sur Win 2003 Srv du moins, démarre beaucoup plus rapidement que powersell et peuvent être facilement intégrés dans le processus de construction.

52voto

Andy Welch Points 161

@tori3852

J'ai trouvé que

dir > a.txt | type a.txt

n'a pas fonctionné (les premières lignes de la liste des répertoires seulement - je soupçonne une sorte de bifurcation du processus et la deuxième partie, la commande 'type', s'est terminée avant la fin de la liste des répertoires ? ), donc à la place j'ai utilisé :

dir > z.txt && type z.txt

ce qui a fait - des commandes séquentielles, l'une se termine avant que la seconde ne commence.

Merci.
C'est bon de trouver ce genre de choses, j'apprécie.

20 votes

Vous devez utiliser & au lieu de && si vous voulez vous assurer que le type est exécutée même si dir La commande a échoué. C'est utile lorsqu'il y a eu une forme d'erreur dans votre commande et que vous voulez quand même voir le fichier journal sur la console. Voir L'article de Microsoft à ce sujet . Cependant, cela pose le problème de %errorlevel% étant fixé au niveau d'erreur de type (qui serait égal à 0).

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