Если вы находитесь в CLI, почему бы не использовать цикл FOR, чтобы «делать» все, что вы хотите:
for /F "delims=" %a in ('dir') do @echo %a && echo %a >> output.txt
Отличный ресурс по Windows CMD для циклов: https://ss64.com/nt/for_cmd.html
Ключевым моментом здесь является установка разделителей (разделителей), которые будут разбивать каждую строку вывода, на ничто. Таким образом, он не будет нарушен по умолчанию пустого пространства. % A - это произвольная буква, но она используется в разделе «do», чтобы ... ну что-то делать с символами, которые были проанализированы в каждой строке. В этом случае мы можем использовать амперсанды (&&) для выполнения 2-й команды echo для создания или добавления (>>) к файлу по нашему выбору. Безопаснее придерживаться этого порядка команд DO в случае, если при записи файла возникнет проблема, мы сначала по крайней мере выведем эхо на консоль. Знак (@) перед первым эхо-сигналом подавляет консоль от показа самой эхо-команды и вместо этого просто отображает результат команды, которая должна отображать символы в% a. В противном случае вы увидите:
echo Громкость на диске [x] - Windows
Громкость на диске [x] - Windows
ОБНОВЛЕНИЕ: / F пропускает пустые строки, и единственное, что нужно исправить, - это предварительно отфильтровать вывод, добавив символ в каждую строку (возможно, с номерами строк через команду find). Решение этого в CLI не быстро и не красиво. Кроме того, я не включил STDERR, поэтому здесь также фиксируются ошибки:
for /F "delims=" %a in ('dir 2^>^&1') do @echo %a & echo %a >> output.txt
Перенаправление сообщений об ошибках
Символы (^) предназначены для экранирования символов после них, потому что команда представляет собой строку, которая интерпретируется, а не вводится непосредственно в командной строке.