La manière naïve simple qui est lente car elle ouvre et positionne le pointeur de fichier plusieurs fois vers la fin du fichier.
@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt
Un meilleur moyen - plus facile à écrire et plus rapide car le fichier n'est ouvert et positionné qu'une seule fois.
@echo off
>output.txt (
command1
command2
...
commandN
)
Un autre moyen efficace et rapide qui n'ouvre et ne positionne le fichier qu'une seule fois
@echo off
call :sub >output.txt
exit /b
:sub
command1
command2
...
commandN
Modifier 17/04/2020
De temps en temps, vous souhaiterez peut-être écrire à plusieurs reprises dans deux fichiers ou plus. Vous pouvez également souhaiter différents messages à l'écran. Il est toujours possible de le faire efficacement en redirigeant vers des poignées non définies en dehors d'un bloc ou d'un sous-programme entre parenthèses, puis en utilisant la &
notation pour référencer les fichiers déjà ouverts.
call :sub 9>File1.txt 8>File2.txt
exit /b
:sub
echo Screen message 1
>&9 File 1 message 1
>&8 File 2 message 1
echo Screen message 2
>&9 File 1 message 2
>&8 File 2 message 2
exit /b
J'ai choisi d'utiliser les poignées 9 et 8 dans l'ordre inverse, car cette méthode est plus susceptible d'éviter une redirection permanente potentielle en raison d'un défaut de conception de l'implémentation de la redirection Microsoft lors de l'exécution de plusieurs redirections sur la même commande. C'est très peu probable, mais même cette approche pourrait exposer le bogue si vous essayez assez fort. Si vous organisez la redirection, vous êtes assuré d'éviter le problème.
3>File1.txt ( 4>File2.txt call :sub)
exit /b
:sub
etc.
%~f0
donne toujours le chemin complet du script batch, même à l'intérieur d'un sous-programme CALLed :.>output.txt 2>&1
cmd /?
ou àhelp cmd
partir de la ligne de commande de la console pour la documentation. L'astuce de la troisième méthode est que la redirection sur le CALL s'applique à toutes les commandes dans le sous-programme CALLed.si vous voulez rediriger les flux out et err
la source
>>
s'ajoutera àa.txt
. Pour remplacer à laa.txt
place, utilisez>
. stackoverflow.com/q/4458231/1098302Je sais que c'est un article plus ancien, mais quelqu'un tombera dessus dans une recherche Google et il semble également que certaines questions posées par le PO dans les commentaires n'aient pas été spécifiquement traitées. Aussi, allez-y doucement car c'est ma première réponse publiée sur SO. :)
Pour rediriger la sortie vers un fichier en utilisant un nom de fichier généré dynamiquement, mon approche go-to (read: quick & dirty) est la deuxième solution proposée par @dbenham. Par exemple, ceci:
Créera un fichier comme ce que vous voyez dans cette capture d'écran du fichier dans le répertoire cible
Cela contiendra cette sortie:
Gardez également à l'esprit que cette solution dépend des paramètres régionaux, alors faites attention à la manière et au moment de l'utiliser.
la source
ou
devrait remplir la facture.
Si vous voulez
APPEND
la sortie, utilisez à la>>
place de>
.>
va démarrer un nouveau fichier journal.la source
la source
Il existe un petit programme sympa que vous pouvez utiliser pour rediriger la sortie vers un fichier et la console
Afficher l'extrait de code
la source
Ajoutez ces deux lignes en haut de votre fichier de commandes, tous les stdout et stderr après seront redirigés vers log.txt:
la source
J'ai utilisé la commande ci-dessus dans mon fichier de commandes et cela fonctionne. Dans le fichier journal, il montre les résultats de ma commande.
la source
Cela peut échouer dans le cas de caractères «toxiques» dans l'entrée. Considérer une entrée comme thisIsAnIn ^^^^ put est un bon moyen de comprendre ce qui se passe. Bien sûr, il existe une règle selon laquelle une chaîne d'entrée DOIT être entre guillemets doubles, mais j'ai le sentiment que cette règle n'est une règle valide que si la signification de l'entrée est un emplacement sur une partition NTFS (peut-être que c'est une règle pour les URL I suis pas sûr). Mais ce n'est pas une règle pour une chaîne d'entrée arbitraire bien sûr (c'est "une bonne pratique" mais vous ne pouvez pas compter avec).
la source
L'ajout des lignes suivantes au bas de votre fichier de commandes récupérera tout comme affiché dans la fenêtre CMD et l'exportera dans un fichier texte:
Il effectue essentiellement une sélection de tout -> copier dans le presse - papiers -> coller dans un fichier texte .
la source