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

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

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

echo hello\nworld

Что бы вывести:

hello
world

Ответ 1

echo hello & echo.world

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

Ответ 2

Использование:

echo hello
echo.
echo world

Ответ 3

Вот, пожалуйста, создайте файл .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.

Ответ 4

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

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

Результат цитированного выше cmd файла:

line1

line2

Ответ 5

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

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 Command Interpreter (CMD.EXE)?

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

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

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

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

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

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

Ответ 6

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. Продолжает выполнение эхо-сообщения.

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

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

set t=^&echo.     ::there are spaces up to the double colon

Ответ 7

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

echo hello > temp
echo world >> temp

Ответ 8

Точно так же, как предлагает Гримтрон - вот краткий пример для его определения:

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

Выход

C:\>test.bat
hello
world

Ответ 9

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

(echo a & echo. & echo b) > file_containing_multiple_lines.txt

Ответ 10

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

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

Выход будет

a
b
c d

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

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

Ответ 11

Если кто-то приходит сюда, потому что они ищут эхо пустую строку из MINGW make makefile, я использовал

@cmd /c echo.

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

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

Ответ 12

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

echo Hi!
echo[
echo Hello!

Ответ 13

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

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

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

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .

Ответ 14

Решения Ken и Jeb хорошо работают.

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

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

Пример:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt

Ответ 15

Если нужно использовать знаменитый \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!%

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

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

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

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


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

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

Ответ 16

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

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

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

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

Ответ 17

Я не могу сделать это проще:

echo echo hello^&echo world^&pause>silly.bat                       
call silly.bat

Ответ 18

Наиболее консервативный способ сделать это в системах linux - -e псевдоним -e который интерпретирует экранированные символы с обратной косой чертой.

echo -e "hello\nworld"

Вот другие примеры

Ответ 19

Я не уверен, почему люди не рекомендовали это, но echo имеет возможность включить escape-обратные экраны, что означает, что \n будет работать с echo.

Следовательно

echo -e "Hello\nWorld"

даст результат

Hello
World