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

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

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

echo hello\nworld

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

hello
world

Ответы [ 18 ]

6 голосов
/ 22 апреля 2013

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

@cmd /c echo.

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

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

3 голосов
/ 16 декабря 2016

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

echo Hi!
echo[
echo Hello!
2 голосов
/ 08 февраля 2018

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

2 голосов
/ 30 сентября 2016

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

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

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

Пример:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
2 голосов
/ 02 июня 2010

Это сработало для меня, отсрочка не требуется:

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

Он записывает вывод так:

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
0 голосов
/ 30 июля 2018

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

echo -e "hello\nworld"

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

0 голосов
/ 30 декабря 2014

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

echo echo hello^&echo world^&pause>silly.bat                       
call silly.bat
0 голосов
/ 18 июля 2013

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

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

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

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

...