Вы можете создать настоящий символ новой строки и присвоить его переменной.
setlocal EnableDelayedExpansion
set LF=^
rem TWO empty lines are required
echo This text!LF!uses two lines
Новая строка лучше всего работает с отложенным расширением, вы также можете использовать его с процентным расширением, но тогда это будет немного сложнее.
set LF=^
rem TWO empty lines are required
echo This text^%LF%%LF%uses two lines
echo This also^
uses two lines
Как это работает?
Символ каретки является escape-символом, он экранирует следующий символ и сам удаляется.
Но если следующий символ является переводом строки, перевод строки также удаляется, и только следующий символ эффективно экранируется (даже если это также перевод строки).
Следовательно, требуются две пустые строки, LF1 игнорируется, LF2 экранируется и LF3 необходим для завершения «строки».
set myLinefeed=^<LF1>
<LF2>
<LF3>
Подсказка:
Часто лучше использовать совершенно другой формат определения переменной newline,
чтобы избежать случайного удаления необходимых пустых строк.
(SET LF=^
%=this line is empty=%
)
Я часто удаляю одну из пустых строк, а потом навсегда искал, почему моя программа больше не работала.
И параноидальная версия проверяет также переменную newline на наличие пробелов или другого мусора.
if "!LF!" NEQ "!LF:~0,1!" echo Error "Linefeed definition is defect, probably multiple invisble whitespaces at the line end in the definition of LF"
FOR /F "delims=" %%n in ("!LF!") do (
echo Error "Linefeed definition is defect, probably invisble whitespaces at the line end in the definition of LF"
)