Как и ответ Кена, но с использованием отложенного расширения.
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
потерпит неудачу, так как синтаксический анализатор прекратит синтаксический анализ при однократном переводе строки.
Больше объяснений на
SO: длинные команды разделены на несколько строк в пакетном файле Vista / DOS (.bat)
SO: Как интерпретатор сценариев команд Windows (CMD.EXE) анализирует сценарии?
Редактировать: Избегать echo.
Это не отвечает на вопрос, так как вопрос был об одном echo
, который может выводить несколько строк.
Но, несмотря на другие ответы, которые предлагают использовать echo.
для создания новой строки, следует отметить, что echo.
является худшим, поскольку он очень медленный и может полностью завершиться неудачей, так как cmd.exe ищет файл с именем ECHO
и попробуйте запустить его.
Для печати только пустой строки, вы можете использовать одну из
echo,
echo;
echo(
echo/
echo+
echo=
Но следует избегать использования echo.
, echo\
или echo:
, поскольку они могут быть очень медленными, в зависимости от места, где будет выполняться сценарий, например, сетевой диск.