Если нужно использовать знаменитый \ 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!%
Таким образом, многострочный вывод может быть подготовлен в одном месте, даже в другом файле сценария или во внешнем файле, и распечатан в другом.
Разрыв строки содержится в переменной newline . Его значение должно быть подставлено после , строка echo расширена, поэтому я использую setlocal enableDelayedExpansion , чтобы включить восклицательные знаки, которые раскрывают переменные при выполнении. И выполнение заменяет \ n на символ новой строки (ищите синтаксис в help set ). Конечно, мы могли бы использовать ! 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 подстроки.