Si vous êtes sur la CLI, pourquoi ne pas utiliser une boucle FOR pour "FAIRE" tout ce que vous voulez:
for /F "delims=" %a in ('dir') do @echo %a && echo %a >> output.txt
Grande ressource sur Windows CMD pour les boucles: https://ss64.com/nt/for_cmd.html
La clé ici est de définir les délimètres (délimitations), qui briseraient chaque ligne de sortie, à rien. De cette façon, il ne se cassera pas sur la valeur par défaut de l'espace blanc. Le% a est une lettre arbitraire, mais il est utilisé dans la section "faire" pour, eh bien ... faire quelque chose avec les caractères qui ont été analysés à chaque ligne. Dans ce cas, nous pouvons utiliser les esperluettes (&&) pour exécuter la 2e commande echo pour créer ou ajouter (>>) à un fichier de notre choix. Plus sûr de conserver cet ordre de commandes DO en cas de problème d'écriture du fichier, nous aurons au moins l'écho sur la console en premier. Le signe at (@) devant le premier écho empêche la console d'afficher la commande écho elle-même et affiche simplement le résultat de la commande qui consiste à afficher les caractères dans% a. Sinon, vous verriez:
echo Volume dans le lecteur [x] est Windows
Volume dans le lecteur [x] est Windows
MISE À JOUR: / F ignore les lignes vides et le seul correctif consiste à pré-filtrer la sortie en ajoutant un caractère à chaque ligne (peut-être avec des numéros de ligne via la commande find). Résoudre cela dans CLI n'est pas rapide ou joli. De plus, je n'ai pas inclus STDERR, alors voici également les erreurs de capture:
for /F "delims=" %a in ('dir 2^>^&1') do @echo %a & echo %a >> output.txt
Redirection des messages d'erreur
Les carets (^) sont là pour échapper aux symboles après eux, car la commande est une chaîne qui est interprétée, par opposition à dire, la saisir directement sur la ligne de commande.