Как я могу отобразить новую строку в пакетном файле?

Как вы можете вставить новую строку из вывода командного файла?

Я хочу сделать что-то вроде:

echo hello\nworld

Что выведет:

hello
world

person Brian R. Bondy    schedule 25.09.2008    source источник
comment
Пригодился для меня. Мне пришлось делать эхо \ n \ n | my_app.exe в скрипте. Я сделал (эхо. && эхо.) | my_app.exe   -  person Vignesh    schedule 18.02.2011
comment
Начинается код простого подхода: ›echo hello & echo world, даст вам то, что вам нужно   -  person prudviraj    schedule 22.01.2015
comment
Вы можете вставить невидимый ascii chr (255) в отдельную строку, что приведет к появлению новой пустой строки. Удерживая нажатой клавишу [alt], нажмите 255 на клавиатуре. это вставляет chr (255), который представляет собой пустой квадрат. т.е. echo (alt + 255) Вы можете использовать только клавиатуру, а не цифры в верхней части клавиатуры querty!   -  person jwzumwalt    schedule 20.11.2018
comment
Подобно тому, как половина ремонта компьютеров заключается в его подключении и включении, половина разработки программного обеспечения - это то, что я называю космической инженерией. Именно поэтому нам нужны пустые строки.   -  person Bob Stein    schedule 07.04.2019
comment
Как насчет этого ? echo Yes&echo No   -  person    schedule 15.08.2019
comment
@jwzumwalt спасибо за предложение alt + 255, отлично работает в командной строке   -  person K Vij    schedule 22.10.2020
comment
printf \ n \ n \ n   -  person Mark    schedule 16.12.2020


Ответы (20)


echo hello & echo.world

Это означает, что вы можете определить & echo. как константу для новой строки \n.

person Grimtron    schedule 25.09.2008
comment
в примере точка не нужна, но она нужна, чтобы отобразить пустую пустую строку: echo. && echo hello && echo. && echo world - person matt wilkie; 17.06.2011
comment
Можете ли вы сделать это с помощью одного эха, чтобы его можно было перенаправить в файл? - person Shahbaz; 26.10.2011
comment
@Shahbaz - $ (echo Hello && echo World) > ./File.txt - person Nathan J.B.; 30.11.2011
comment
Точка в эхо. никогда не перестает удивлять меня. Это так устарело, и все же я всегда забываю, что точка должна быть строго связана с именем команды, без пробелов между ними. В твоем посте ошибки нет, пишу просто как напоминание: эхо. ! = эхо. ! - person quetzalcoatl; 10.02.2012
comment
Отсутствует окончательный ответ: $ echo. ›› myfile.txt это добавит разрыв строки в файл - person Guillaume Bois; 21.06.2012
comment
Просто подумал, что добавлю это. Я хотел просмотреть системную PATH переменную из командной строки, но легко читаемую. Этот пост мне помог, и я придумал следующее: for /f "tokens=*" %i in ("%path%") do set a=%i && set (b=!a:;=^&echo.!) затем echo %b% и вуаля! Построчный вывод. - person dgo; 16.08.2013
comment
У меня есть дополнительная информация! echo. делает новую строку. echo показывает текст вместо 'hello' is not recognized as an internal or external command, operable program or batch file. - person MineCMD; 30.10.2014
comment
@ NathanJ.Brauer, Single & тоже работает: (echo Hello&echo World) > ./File.txt - person Pacerier; 29.07.2015
comment
@mattwilkie, какая разница между двумя && вместо одного &? - person Pacerier; 29.07.2015
comment
@Pacerier: одиночный амперсанд означает «сделай это», тогда как «двойной» означает «сделай это», а если нет ошибки, то сделай это. Двойная труба, ||, это напарник, сделай это, если сбой, то сделай это. См. ss64.com/nt/syntax-redirection.html. - person matt wilkie; 29.07.2015
comment
@quetzalcoatl, это становится еще более странным. Другие символы, кроме точки, тоже работают. SS64 говорит, что лучший синтаксис - это echo( для повышения производительности (но все же без места, заметьте). Расширенное обсуждение других персонажей и их достоинств / недостатков в ECHO. НЕ ОТКАЗЫВАЕТСЯ ввести текст или пустую строку - вместо этого используйте ECHO / - person matt wilkie; 29.07.2015
comment
@mattwilkie, продолжайте в комментариях в ответ ниже .... - person Pacerier; 29.07.2015
comment
@mattwilkie - технически сделайте это, тогда будет использоваться одна точка с запятой (например, echo hi; echo bye;). Использование одного амперсанда может дать тот же результат, но оно объединит два возвращаемых значения в одно коллективное двоичное значение, вместо того, чтобы иметь два отдельных независимых возвращаемых значения (это сложнее, чем это, но это начало основ, ха-ха). - person Nathan J.B.; 30.07.2015
comment
@ NathanJ.Brauer, эта команда / CMD (Dos / Windows) не является bash и т. Д. Точка с запятой - это просто еще один символ и не имеет никакого эффекта. - person matt wilkie; 24.08.2015
comment
Обратите внимание, что пробел между hello и & тоже отображается эхом! Просто удалите его, чтобы этого не произошло ... - person aschipfl; 08.06.2018

Использовать:

echo hello
echo.
echo world
person Matt Lacey    schedule 25.09.2008
comment
Возможно ли при предоставлении строки в одном операторе эха? - person Brian R. Bondy; 25.09.2008
comment
Зачем вам нужно делать это с помощью одного оператора echo; где вред иметь еще один? - person Rob; 25.09.2008
comment
@Rob, я только что столкнулся с этой проблемой, и ничего из этого не работает. В моем примере вам нужно повторить одно выражение. Я генерирую несколько текстовых файлов из HTML и создаю Makefile с помощью echo "Makefile contents (which has \n)" > Makefile. С несколькими эхо-сигналами это не сработает. - person Shahbaz; 26.10.2011
comment
@Rob, нам, конечно, нужен один оператор ..... Как бы тогда передать 3 эха в файл? - person Pacerier; 29.07.2015
comment
@ Роб, ты не можешь просто ответить на вопрос Брайана Р., Бонди? Он не просит альтернативных подходов - person Green; 24.09.2015
comment
Используйте echo; вместо echo.. По какой-то причине echo. не будет работать, если в рабочем каталоге уже есть файл с именем echo. Однако echo; работает нормально. - person Brandin; 08.02.2016
comment
Используйте & (или &&), чтобы сделать их одним оператором: например, чтобы поместить hello \ nworld в текстовый файл: (echo hello & echo world) >> ./test.txt - person Ned Martin; 23.03.2016
comment
Для многострочного вывода в файл почему бы просто не сделать следующее? echo line 1 > Makefile, а затем echo line 2 >> Makefile. Использование >> приводит к добавлению вывода к файлу, что является именно тем поведением, которое вам нужно в этом случае. - person dgnuff; 04.01.2018
comment
echo: рекомендуется SS64. - person Alejandro Blasco; 18.03.2020

Итак, создайте файл .bat со следующим содержимым:

@echo off
REM Creating a Newline variable (the two blank lines are required!)
set NLM=^


set NL=^^^%NLM%%NLM%^%NLM%%NLM%
REM Example Usage:
echo There should be a newline%NL%inserted here.

echo.
pause

Вы должны увидеть следующий результат:

There should be a newline
inserted here.

Press any key to continue . . .

Очевидно, вам нужен только код между операторами REM.

person Community    schedule 06.11.2008
comment
Очень впечатляет, не могли бы вы найти время, чтобы объяснить, как работает строковый набор NL = ^^^% NLM %% NLM% ^% NLM %% NLM%? Я не могу понять это - person Andy Morris; 12.11.2009
comment
Увы, это не работает при передаче строки echoed другой программе. - person Joey; 18.03.2011
comment
@andy мне кажется, что комментарий +8 оправдывает вопрос: stackoverflow.com/questions/6379619/ - person matt wilkie; 17.06.2011
comment
Это замечательный пример, показывающий, что cmd.exe и командные файлы Windows совершенно безумны! - person mivk; 15.10.2011
comment
ПРИМЕЧАНИЕ ДЛЯ СЕБЯ: набор строк NLM = ^ не должен содержать ничего после CARET и должен иметь 2 пустые строки после него. - person mnemotronic; 24.10.2015
comment
К сожалению, вы не можете использовать его в переменной. Например, set z=foo%NL%bar & echo %z% не даст ожидаемых результатов, он будет печатать только foo. - person Synetech; 21.12.2015
comment
См. Мой ответ о более простом методе. set nl=^&echo., то просто echo hello %nl% world дает тот же эффект. - person coltonon; 29.06.2016
comment
Я получаю. Здесь должна быть вставлена ​​новая строка. - person soulblazer; 12.04.2017
comment
@Synetech Вы действительно можете поместить в переменную разрыв строки, используя первую форму. Попробуйте это: set A=first line^^^%NLM%%NLM%^%NLM%%NLM%second line затем echo %A% - person rkagerer; 06.10.2019
comment
@rkagerer, работает. Отлично! ???? (Жаль, что методы экранирования в командной строке такие безумные. :-) - person Synetech; 07.10.2019

В cmd / bat-файлах есть стандартная функция echo: для записи пустой строки, которая имитирует новую строку в вашем cmd-выводе:

@echo off
@echo line1
@echo:
@echo line2

Вывод указанного cmd-файла:

line1

line2
person macropas    schedule 26.06.2010
comment
Фактически, любой НЕИСПОЛЬЗУЕМЫЙ специальный символ должен работать. Я всегда рекомендую использовать /, потому что косая черта является стандартным символом для параметров команды. Кроме того, я всегда критикую использование точки, которую, к сожалению, выбрал кто-то в Microsoft, потому что команда: echo.com дает разные результаты в зависимости от версии командного процессора MS-DOS / Windows Batch. - person Aacini; 30.07.2011
comment
Единственная версия, которая всегда работает, - это echo(. Похоже, это может вызвать проблемы, но на самом деле работает отлично. Во всех других формах есть по крайней мере одна ситуация, когда команда не будет выполняться должным образом. - person dbenham; 19.06.2013
comment
@Aacini, не могли бы вы найти ссылку на это? Я тестировал, и он работает, что интересно, но должна существовать какая-то памятка дизайнера, спецификация или, по крайней мере, руководство, рассказывающее эту историю. - person n611x007; 18.04.2014
comment
@dbenham, это еще интереснее. знаете ли вы примеры или объяснения ситуаций, о которых говорите? кроме того, знаете ли вы о каких-либо историях, памятках, спецификациях или руководствах дизайнера, в которых описывается эта функция командной строки dos и cmd? - person n611x007; 18.04.2014
comment
@naxa - Ничего официального, просто коллективное знание, полученное несколькими хакерами. Цель состоит в том, чтобы иметь синтаксис, который можно было бы использовать для ECHO любого значения, включая ничего, и никогда не беспокоиться о получении чего-либо, кроме ожидаемого. Лучшее из известных мне резюме находится на dostips.com/forum/viewtopic. php? p = 4554 # p4554. Это как бы оставляет вас в подвешенном состоянии, но никто никогда не придумал сценарий, при котором ECHO( терпит неудачу. - person dbenham; 18.04.2014
comment
@dbenham, утверждение, что echo( - единственная работающая версия, неверно. Автор выступает против ., +, [ и ], но есть еще echo=, echo,, echo\ , echo/ и echo:, к которым он вообще не обращался. - person Pacerier; 29.07.2015
comment
@Aacini, почему не echo=? Использование / вводит в заблуждение, потому что / уже имеет значение в cmd (используется для представления флагов). - person Pacerier; 29.07.2015
comment
@Pacerier: попробуйте echo=/? и echo,/?, и вы увидите, что оба не работают (потому что они не показывают /?). Из остальных трех echo\/? выглядит как побег на других языках, а echo:/? может быть ошибочно принят за ярлык или диск. Форма, которая выглядит более стандартной, - это echo//? точно, потому что / используется для параметров команды! - person Aacini; 29.07.2015
comment
@Pacerier - есть примеры неудач для каждого из этих предложений. Внимательно прочтите dostips.com/forum/viewtopic.php?p=4554#. p4554. - person dbenham; 29.07.2015
comment
@Pacerier, здесь достаточно echo для отдельного вопроса. Возможно, что-то вроде того, какие символы могут сразу следовать за echo, и каковы их эффекты? - person matt wilkie; 31.07.2015
comment
Можно подтвердить, что echo( кажется произвольно безопасным, даже в глубоко вложенных циклах FOR, которые могут быть печально известны обработкой странностей со специальными символами. - person kayleeFrye_onDeck; 06.11.2018
comment
@dbenham, когда я использую echo(, он создает не новую строку, а этот ഠ嘊攀爀猀椀漀渀                    ഀ਀ 㤀㘀䌀㄀     㐀 㔀䘀   㔀㄀㘀㘀 ㄀㠀   ഀ਀. - person Cardinal System; 01.02.2020

Как и ответ Кена, но с использованием отложенного расширения.

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

Сначала создается одиночный символ перевода строки, который назначается переменной \ n.
Это работает, когда курсор в конце строки пытается экранировать следующий символ, но если это перевод строки, он игнорируется и считывается следующий символ. и экранированы (даже если это также перевод строки).
Тогда вам понадобится третий перевод строки, чтобы завершить текущую инструкцию, иначе третья строка будет добавлена ​​к LF-переменной.
Даже в пакетных файлах строки заканчиваются на CR / LF важны только LF, так как CR удаляются на этой фазе синтаксического анализа.

Преимущество использования отложенного раскрытия заключается в том, что здесь вообще нет специальной обработки символов.
echo Line1%LF%Line2 завершится ошибкой, поскольку синтаксический анализатор прекращает синтаксический анализ при одиночных переводах строки.

Дополнительные объяснения находятся на странице
ТАК: длинные команды разделены на несколько строк в пакетном файле Vista / DOS (.bat)
ИСТОЧНИК: Как интерпретатор команд Windows (CMD.EXE) анализирует сценарии?

Изменить: избегать echo.

Это не отвечает на вопрос, поскольку вопрос касался одного echo, который может выводить несколько строк.

Но, несмотря на другие ответы, которые предлагают использовать echo. для создания новой строки, следует отметить, что echo. является худшим, поскольку он очень медленный и может полностью выйти из строя, поскольку cmd.exe ищет файл с именем ECHO и пытается Начни это.

Для печати пустой строки вы можете использовать одну из

echo,
echo;
echo(
echo/
echo+
echo=

Но следует избегать использования echo., echo\ или echo:, поскольку они могут быть очень медленными, в зависимости от места, где будет выполняться сценарий, например, сетевой диск.

person jeb    schedule 16.06.2011
comment
Если вы передадите строку с новой строкой в ​​качестве параметра пакетной подпрограмме, например call :pause line1!\n!line2, начните подпрограмму с setlocal EnableDelayedExpansion и закончите с setlocal DisableDelayedExpansion, чтобы символы новой строки не интерпретировались преждевременно. - person stevek_mcc; 08.11.2016
comment
+1 за набор персонажей echo, echo; echo( echo/ echo+ echo= и галерею жуликов echo. echo\ echo:. А теперь, если бы вы объяснили, почему, черт возьми, эта работа, я должен вам бесплатное пиво. - person Bob Stein; 07.04.2019

echo. Достаточно сказано.

Если он вам нужен в одной строке, используйте &. Например,

echo Line 1 & echo. & echo line 3

будет выводиться как:

Line 1

line 3

Теперь предположим, что вы хотите чего-то более красивого, ...

set n=^&echo.
echo hello %n% world

Выходы

hello
world

Затем просто вставляйте %n% всякий раз, когда вам нужна новая строка в операторе echo. Это больше похоже на ваш \n, используемый на разных языках.

Разбивка

set n= устанавливает переменную n равной:

^ Обнуляет следующий за ним символ:

& Означает выполнить другую команду в той же строке. Мы не заботимся об уровне ошибок (это эхо-оператор для громкого крика), поэтому && не требуется.

echo. Продолжает эхо-запрос.

Все это работает, потому что вы можете создавать переменные в виде кода и использовать их внутри других команд. Это что-то вроде функции гетто, поскольку пакетная обработка - не самый продвинутый из языков сценариев оболочки. Это работает только из-за плохого использования переменных в пакете, естественного отсутствия обозначения между целыми числами, символами, числами с плавающей запятой, строками и т. Д.

Если вы изобретательны, вы можете заставить это работать с другими вещами. Например, используя его для вывода табуляции

set t=^&echo.     ::there are spaces up to the double colon
person coltonon    schedule 16.07.2014
comment
Не используйте echo., поскольку он сначала пытается найти файл с этим именем. Используйте другие знаки препинания, например echo, - person Kuba hasn't forgotten Monica; 22.12.2016

При отображении чего-либо для перенаправления в файл несколько команд эха не будут работать. Думаю, редиректор ">>" - хороший выбор:

echo hello > temp
echo world >> temp
person Crend King    schedule 09.08.2009
comment
В первом примере с помощью ›будет создан новый файл, во втором, с помощью ››, будет добавлен к существующему файлу (или создан его, если он еще не существует). - person Yann Duran; 09.08.2012
comment
(echo hello && echo world) > temp, упомянутый Натаном Дж. Брауэром в комментарии к (текущему) принятому ответу, работает. - person Gerold Broser; 09.06.2016

Если вам нужно поместить результаты в файл, вы можете использовать

(echo a & echo. & echo b) > file_containing_multiple_lines.txt
person test30    schedule 02.09.2014

Как и предлагает Гримтрон - вот краткий пример, чтобы определить это:

@echo off
set newline=^& echo.
echo hello %newline%world

Выход

C:\>test.bat
hello
world
person Community    schedule 05.03.2010
comment
На самом деле он будет отображать дополнительный символ новой строки после мира - person BlueRaja - Danny Pflughoeft; 10.06.2011
comment
@blue завершающая новая строка кажется функцией самого командного файла. Если вы повторите строку echo hello %newline%world, между ними нет пробелов. - person matt wilkie; 17.06.2011
comment
echo "Hello %newline% world" не работает, поскольку находится внутри кавычек. Потому что это не настоящий перевод строки. - person jeb; 21.10.2013
comment
Я вижу это повсюду, и это вводит в заблуждение / сбивает с толку и, конечно же, ужасно неэффективно по сравнению с настоящей версией новой строки. - person HaxAddict1337; 02.08.2020

Вы также можете сделать это,

(for %i in (a b "c d") do @echo %~i)

Выход будет,

a
b
c d

Обратите внимание, что когда это помещается в пакетный файл, "%" должен быть удвоен.

(for %%i in (a b "c d") do @echo %%~i)
person albert    schedule 20.09.2011
comment
Это решение также работает, если вы хотите отобразить амперсанд & вместо новой строки. - person parvus; 26.06.2014
comment
я думаю, что нашел ошибку: * char - person ; 26.03.2017

Если кто-то приходит сюда, потому что хочет повторить пустую строку из make-файла MINGW, я использовал

@cmd /c echo.

простое использование echo. вызывает ужасное сообщение об ошибке process_begin: CreateProcess(NULL, echo., ...) failed..

Надеюсь, это поможет хотя бы еще одному человеку :)

person Wayne Uroda    schedule 22.04.2013
comment
Не уверен, сарказм это или нет: P - person Wayne Uroda; 29.05.2020
comment
Узнайте, заглянув в свой почтовый ящик: D - person Mesalcode; 29.05.2020

Чтобы начать новую строку в пакете, все, что вам нужно сделать, это добавить «echo [», например:

echo Hi!
echo[
echo Hello!
person PryroTech    schedule 16.12.2016
comment
Это медленно и не работает, когда существует файл с именем echo[.bat. - person jeb; 23.12.2016
comment
Какие? Он должен работать мгновенно, а также просто удалить файл echo [.bat. - person PryroTech; 23.12.2016
comment
Это почти то же самое, что и эхо. синтаксис. - person PryroTech; 23.12.2016
comment
Да и echo. тоже плохое решение. - person jeb; 24.12.2016
comment
Как видно из предыдущих ответов, сначала будет предпринята попытка найти файл по пути, из-за чего он будет работать очень медленно. То же верно и для echo.. Ожидать, что пользователи вашего скрипта удалят файлы в своей системе только потому, что вашему скрипту нужна новая строка, мне не кажется хорошим дизайном. - person Abel; 29.10.2017

Решения Кена и Джеба работают хорошо.

Но новые строки создаются только с помощью символа LF, а мне нужны символы CRLF (версия для Windows).

Для этого в конце сценария я преобразовал LF в CRLF.

Пример:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
person otaviodecampos    schedule 30.09.2016

Если нужно использовать знаменитый \ n в строковых литералах, которые могут быть переданы в переменную, можно написать код, как в сценарии Hello.bat ниже:

@echo off
set input=%1
if defined input (
    set answer=Hi!\nWhy did you call me a %input%?
) else (
    set answer=Hi!\nHow are you?\nWe are friends, you know?\nYou can call me by name.
)

setlocal enableDelayedExpansion
set newline=^


rem Two empty lines above are essential
echo %answer:\n=!newline!%

Таким образом, многострочный вывод может быть подготовлен в одном месте, даже в другом сценарии или внешнем файле, и распечатан в другом.

Разрыв строки сохраняется в переменной новой строки. Его значение должно быть заменено после расширения строки echo, поэтому я использую setlocal enableDelayedExpansion, чтобы включить восклицательные знаки, которые расширяют переменные при выполнении. И выполнение заменяет \ n содержимым новой строки (синтаксис ищите в наборе справки). Конечно, мы могли бы использовать ! Newline! при установке ответа, но \ n более удобно. Его можно передать извне (попробуйте Hello R2 \ nD2), где никто не знает имя переменной, содержащей разрыв строки (Да, Hello C3! Newline! P0 работает с так же).

Приведенный выше пример может быть преобразован в подпрограмму или автономный пакет, используемый как call:mlecho Hi\nI'm your comuter:

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^


echo %text:\n=!nl!%
goto:eof

Обратите внимание, что дополнительная обратная косая черта не помешает скрипту проанализировать подстроку \ n.

person Tomator    schedule 08.02.2018
comment
По сути, вы делаете то же самое, что и ответ Джеба выше. - person Squashman; 08.06.2018
comment
Ответы, которые я прочитал выше, были очень полезны, но мне нужно было вызвать подпрограмму скрипта od, которая будет анализировать \ n, поэтому я бы избегал применять этот трюк повсюду. Это требовало доработки решения, и я поделился этой доработкой. Надеюсь, это не повредило ни одному животному. - person Tomator; 29.06.2018
comment
Этот ответ полезен, но, поскольку восклицательные знаки интерпретируются, как в вашем аргументе может отображаться буквенный восклицательный знак? Я попытался избежать их, поставив перед ними одну или две вставки, но это не сработало. - person Florent Angly; 26.01.2021
comment
@FlorentAngly, попробуйте это: set ex=! setlocal enableDelayedExpansion echo shout!ex! - person Tomator; 27.01.2021

Это сработало для меня, без необходимости отложенного расширения:

@echo off
(
echo ^<html^> 
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause

Он записывает вывод следующим образом:

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
person NahuelGQ    schedule 02.06.2010
comment
-1 echo asdf >myfile.txt даст точно такие же результаты. echo добавляет новую строку в конец строки. - person BlueRaja - Danny Pflughoeft; 10.06.2011
comment
Отличный ответ, будучи единственным человеком, осознавшим ценность использования круглых скобок для новых строк. Я считаю, что создатели DOS хотели, чтобы вы это сделали именно так. - person djangofan; 03.12.2013

Для Windows 10 с последовательностями виртуальных терминалов там существуют средства управления положением курсора в высокой степени.

Чтобы определить escape-последовательность 0x1b, можно использовать следующее:

@Echo off
 For /f %%a in ('echo prompt $E^| cmd')Do set \E=%%a

Чтобы вывести одну новую строку между строками:

<nul set /p "=Hello%\E%[EWorld"

Для вывода n новой строки, где n заменяется целым числом:

<nul set /p "=%\E%[nE"

Много

person T3RR0R    schedule 07.06.2021

Вы можете использовать @echo (@echo + [пробел] + [незащищенное пространство])

Примечание: незащищенное пространство можно получить с помощью Alt + 0160.

Надеюсь, это поможет :)

[править] Хм, вы правы, мне это нужно в Makefile, там он отлично работает. Думаю, мой ответ не адаптирован для командных файлов ... Моя плохая.

person johan d    schedule 18.07.2013
comment
У меня ECHO ist eingeschaltet (ON). не пустая строка, попробовал в командной строке - person jeb; 18.07.2013
comment
Это неразрывный пробел, а не новая строка. - person Ry-♦; 18.07.2013

просто

set nl=.
echo hello
echo%nl%
REM without space ^^^
echo World

Результат:

hello
world
person Pear    schedule 30.04.2021
comment
Чем отличается ответ 13-летней давности? Ваш ответ сложен без необходимости. И, как и другое решение, оно не отвечает на вопрос, как это сделать с помощью одного эха. - person jeb; 30.04.2021

почему бы не использовать подстроку / заменить пробел на echo;?

set "_line=hello world"
echo\%_line: =&echo;%
  • Полученные результаты:
hello
world
  • Или замените \ n на echo;
set "_line=hello\nworld"
echo\%_line:\n=&echo;%
person It Wasn't Me    schedule 05.10.2020

Это решение работает (протестировано):

type nul | more /e /p

Это преобразует изолированные переводы строки в комбинацию перевода строки возврата каретки.

person programmer365    schedule 10.01.2020
comment
Но как это добавить новую строку между текстом? Вопрос о echo hello \n world - person jeb; 20.01.2020
comment
Голосовать против меня. Это не ответ на вопрос - person Mesalcode; 27.05.2020