web-dev-qa-db-fra.com

Windows Batch Script: redirige TOUTES les sorties vers un fichier

J'utilise plusieurs benchmarks Java et j'aimerais archiver les résultats. J'exécute le benchmark (dacapo) comme ceci:

C:\VM\jre\bin\Java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%

Je passe le type de référence sur un paramètre, c'est ce que% arg1% est.

Vous pouvez voir que je redirige la sortie vers un fichier texte. Malheureusement, la première et la dernière ligne de la sortie sont toujours imprimées dans la console et non dans le fichier texte:

===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====

Surtout la dernière ligne serait importante à avoir dans le fichier texte :)

Y a-t-il une astuce pour forcer ce comportement?

30
Nicolas

Vous devez rediriger STDOUT et STDERR .

command > logfile 2>&1

STDIN est le descripteur de fichier # 0, STDOUT est le descripteur de fichier # 1 et - STDERR est le descripteur de fichier # 2.
Tout comme "commande> fichier" redirige STDOUT vers un fichier, vous pouvez également rediriger des descripteurs de fichiers arbitraires entre eux. Le >& L'opérateur redirige entre les descripteurs de fichiers. Donc, 2 >& 1 redirige tout STDERR sortie vers STDOUT .

De plus, prenez soin d'ajouter 2>&1 à la fin de l'instruction car sous Windows, l'ordre de redirection est important comme command 2>&1 > logfile produira un fichier vide, comme l'a ajouté Dawid dans les commentaires.

55
Zach Riggle

Ajoutez 2> & 1 à votre commande:

 C:\VM\jre\bin\Java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 

Cela redirigera STDERR vers STDOUT qui sera ensuite redirigé vers votre fichier texte.

5
Squeezy