Как вы можете вставить новую строку из вывода командного файла?
Я хочу сделать что-то вроде:
echo hello\nworld
Что выведет:
hello
world
Как вы можете вставить новую строку из вывода командного файла?
Я хочу сделать что-то вроде:
echo hello\nworld
Что выведет:
hello
world
echo hello & echo.world
Это означает, что вы можете определить & echo.
как константу для новой строки \n
.
echo. && echo hello && echo. && echo world
- person matt wilkie; 17.06.2011
$ (echo Hello && echo World) > ./File.txt
- person Nathan J.B.; 30.11.2011
PATH
переменную из командной строки, но легко читаемую. Этот пост мне помог, и я придумал следующее: for /f "tokens=*" %i in ("%path%") do set a=%i && set (b=!a:;=^&echo.!)
затем echo %b%
и вуаля! Построчный вывод.
- person dgo; 16.08.2013
echo.
делает новую строку. echo
показывает текст вместо 'hello' is not recognized as an internal or external command, operable program or batch file.
- person MineCMD; 30.10.2014
&
тоже работает: (echo Hello&echo World) > ./File.txt
- person Pacerier; 29.07.2015
&&
вместо одного &
?
- person Pacerier; 29.07.2015
||
, это напарник, сделай это, если сбой, то сделай это. См. ss64.com/nt/syntax-redirection.html.
- person matt wilkie; 29.07.2015
echo(
для повышения производительности (но все же без места, заметьте). Расширенное обсуждение других персонажей и их достоинств / недостатков в ECHO. НЕ ОТКАЗЫВАЕТСЯ ввести текст или пустую строку - вместо этого используйте ECHO /
- person matt wilkie; 29.07.2015
echo hi; echo bye;
). Использование одного амперсанда может дать тот же результат, но оно объединит два возвращаемых значения в одно коллективное двоичное значение, вместо того, чтобы иметь два отдельных независимых возвращаемых значения (это сложнее, чем это, но это начало основ, ха-ха).
- person Nathan J.B.; 30.07.2015
hello
и &
тоже отображается эхом! Просто удалите его, чтобы этого не произошло ...
- person aschipfl; 08.06.2018
Использовать:
echo hello
echo.
echo world
echo "Makefile contents (which has \n)" > Makefile
. С несколькими эхо-сигналами это не сработает.
- person Shahbaz; 26.10.2011
echo;
вместо echo.
. По какой-то причине echo.
не будет работать, если в рабочем каталоге уже есть файл с именем echo
. Однако echo;
работает нормально.
- person Brandin; 08.02.2016
(echo hello & echo world) >> ./test.txt
- person Ned Martin; 23.03.2016
echo line 1 > Makefile
, а затем echo line 2 >> Makefile
. Использование >>
приводит к добавлению вывода к файлу, что является именно тем поведением, которое вам нужно в этом случае.
- person dgnuff; 04.01.2018
Итак, создайте файл .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.
echo
ed другой программе.
- person Joey; 18.03.2011
set z=foo%NL%bar & echo %z%
не даст ожидаемых результатов, он будет печатать только foo
.
- person Synetech; 21.12.2015
set nl=^&echo.
, то просто echo hello %nl% world
дает тот же эффект.
- person coltonon; 29.06.2016
set A=first line^^^%NLM%%NLM%^%NLM%%NLM%second line
затем echo %A%
- person rkagerer; 06.10.2019
В cmd / bat-файлах есть стандартная функция echo:
для записи пустой строки, которая имитирует новую строку в вашем cmd-выводе:
@echo off
@echo line1
@echo:
@echo line2
Вывод указанного cmd-файла:
line1
line2
echo(
. Похоже, это может вызвать проблемы, но на самом деле работает отлично. Во всех других формах есть по крайней мере одна ситуация, когда команда не будет выполняться должным образом.
- person dbenham; 19.06.2013
ECHO(
терпит неудачу.
- person dbenham; 18.04.2014
echo(
- единственная работающая версия, неверно. Автор выступает против .
, +
, [
и ]
, но есть еще echo=
, echo,
, echo\
, echo/
и echo:
, к которым он вообще не обращался.
- person Pacerier; 29.07.2015
echo=
? Использование /
вводит в заблуждение, потому что /
уже имеет значение в cmd (используется для представления флагов).
- person Pacerier; 29.07.2015
echo=/?
и echo,/?
, и вы увидите, что оба не работают (потому что они не показывают /?). Из остальных трех echo\/?
выглядит как побег на других языках, а echo:/?
может быть ошибочно принят за ярлык или диск. Форма, которая выглядит более стандартной, - это echo//?
точно, потому что /
используется для параметров команды!
- person Aacini; 29.07.2015
echo
, и каковы их эффекты?
- person matt wilkie; 31.07.2015
echo(
кажется произвольно безопасным, даже в глубоко вложенных циклах FOR, которые могут быть печально известны обработкой странностей со специальными символами.
- person kayleeFrye_onDeck; 06.11.2018
echo(
, он создает не новую строку, а этот ഠ嘊攀爀猀椀漀渀 ഀ 㤀㘀䌀 㐀 㔀䘀 㔀㘀㘀 㠀 ഀ
.
- person Cardinal System; 01.02.2020
Как и ответ Кена, но с использованием отложенного расширения.
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
завершится ошибкой, поскольку синтаксический анализатор прекращает синтаксический анализ при одиночных переводах строки.
Дополнительные объяснения находятся на странице
ТАК: длинные команды разделены на несколько строк в пакетном файле Vista / DOS (.bat)
ИСТОЧНИК: Как интерпретатор команд Windows (CMD.EXE) анализирует сценарии?
Изменить: избегать echo.
Это не отвечает на вопрос, поскольку вопрос касался одного echo
, который может выводить несколько строк.
Но, несмотря на другие ответы, которые предлагают использовать echo.
для создания новой строки, следует отметить, что echo.
является худшим, поскольку он очень медленный и может полностью выйти из строя, поскольку cmd.exe ищет файл с именем ECHO
и пытается Начни это.
Для печати пустой строки вы можете использовать одну из
echo,
echo;
echo(
echo/
echo+
echo=
Но следует избегать использования echo.
, echo\
или echo:
, поскольку они могут быть очень медленными, в зависимости от места, где будет выполняться сценарий, например, сетевой диск.
call :pause line1!\n!line2
, начните подпрограмму с setlocal EnableDelayedExpansion
и закончите с setlocal DisableDelayedExpansion
, чтобы символы новой строки не интерпретировались преждевременно.
- person stevek_mcc; 08.11.2016
echo,
echo;
echo(
echo/
echo+
echo=
и галерею жуликов echo.
echo\
echo:
. А теперь, если бы вы объяснили, почему, черт возьми, эта работа, я должен вам бесплатное пиво.
- person Bob Stein; 07.04.2019
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.
Продолжает эхо-запрос.
Все это работает, потому что вы можете создавать переменные в виде кода и использовать их внутри других команд. Это что-то вроде функции гетто, поскольку пакетная обработка - не самый продвинутый из языков сценариев оболочки. Это работает только из-за плохого использования переменных в пакете, естественного отсутствия обозначения между целыми числами, символами, числами с плавающей запятой, строками и т. Д.
Если вы изобретательны, вы можете заставить это работать с другими вещами. Например, используя его для вывода табуляции
set t=^&echo. ::there are spaces up to the double colon
echo.
, поскольку он сначала пытается найти файл с этим именем. Используйте другие знаки препинания, например echo,
- person Kuba hasn't forgotten Monica; 22.12.2016
При отображении чего-либо для перенаправления в файл несколько команд эха не будут работать. Думаю, редиректор ">>" - хороший выбор:
echo hello > temp echo world >> temp
(echo hello && echo world) > temp
, упомянутый Натаном Дж. Брауэром в комментарии к (текущему) принятому ответу, работает.
- person Gerold Broser; 09.06.2016
Если вам нужно поместить результаты в файл, вы можете использовать
(echo a & echo. & echo b) > file_containing_multiple_lines.txt
Как и предлагает Гримтрон - вот краткий пример, чтобы определить это:
@echo off
set newline=^& echo.
echo hello %newline%world
C:\>test.bat
hello
world
echo hello %newline%world
, между ними нет пробелов.
- person matt wilkie; 17.06.2011
echo "Hello %newline% world"
не работает, поскольку находится внутри кавычек. Потому что это не настоящий перевод строки.
- person jeb; 21.10.2013
Вы также можете сделать это,
(for %i in (a b "c d") do @echo %~i)
Выход будет,
a
b
c d
Обратите внимание, что когда это помещается в пакетный файл, "%" должен быть удвоен.
(for %%i in (a b "c d") do @echo %%~i)
*
char
- person ; 26.03.2017
Если кто-то приходит сюда, потому что хочет повторить пустую строку из make-файла MINGW, я использовал
@cmd /c echo.
простое использование echo.
вызывает ужасное сообщение об ошибке process_begin: CreateProcess(NULL, echo., ...) failed.
.
Надеюсь, это поможет хотя бы еще одному человеку :)
Чтобы начать новую строку в пакете, все, что вам нужно сделать, это добавить «echo [», например:
echo Hi!
echo[
echo Hello!
echo[.bat
.
- person jeb; 23.12.2016
echo.
тоже плохое решение.
- person jeb; 24.12.2016
echo.
. Ожидать, что пользователи вашего скрипта удалят файлы в своей системе только потому, что вашему скрипту нужна новая строка, мне не кажется хорошим дизайном.
- person Abel; 29.10.2017
Решения Кена и Джеба работают хорошо.
Но новые строки создаются только с помощью символа LF, а мне нужны символы CRLF (версия для Windows).
Для этого в конце сценария я преобразовал LF в CRLF.
Пример:
TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
Если нужно использовать знаменитый \ 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!%
Таким образом, многострочный вывод может быть подготовлен в одном месте, даже в другом сценарии или внешнем файле, и распечатан в другом.
Разрыв строки сохраняется в переменной новой строки. Его значение должно быть заменено после расширения строки echo, поэтому я использую setlocal enableDelayedExpansion, чтобы включить восклицательные знаки, которые расширяют переменные при выполнении. И выполнение заменяет \ n содержимым новой строки (синтаксис ищите в наборе справки). Конечно, мы могли бы использовать ! 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.
set ex=!
setlocal enableDelayedExpansion
echo shout!ex!
- person Tomator; 27.01.2021
Это сработало для меня, без необходимости отложенного расширения:
@echo off
(
echo ^<html^>
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause
Он записывает вывод следующим образом:
<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
echo asdf >myfile.txt
даст точно такие же результаты. echo
добавляет новую строку в конец строки.
- person BlueRaja - Danny Pflughoeft; 10.06.2011
Для Windows 10 с последовательностями виртуальных терминалов там существуют средства управления положением курсора в высокой степени.
Чтобы определить escape-последовательность 0x1b, можно использовать следующее:
@Echo off
For /f %%a in ('echo prompt $E^| cmd')Do set \E=%%a
Чтобы вывести одну новую строку между строками:
<nul set /p "=Hello%\E%[EWorld"
Для вывода n
новой строки, где n
заменяется целым числом:
<nul set /p "=%\E%[nE"
Много
Вы можете использовать @echo
(@echo + [пробел] + [незащищенное пространство])
Примечание: незащищенное пространство можно получить с помощью Alt + 0160.
Надеюсь, это поможет :)
[править] Хм, вы правы, мне это нужно в Makefile, там он отлично работает. Думаю, мой ответ не адаптирован для командных файлов ... Моя плохая.
ECHO ist eingeschaltet (ON).
не пустая строка, попробовал в командной строке
- person jeb; 18.07.2013
просто
set nl=.
echo hello
echo%nl%
REM without space ^^^
echo World
Результат:
hello
world
почему бы не использовать подстроку / заменить пробел на echo;
?
set "_line=hello world"
echo\%_line: =&echo;%
hello
world
echo;
set "_line=hello\nworld"
echo\%_line:\n=&echo;%
Это решение работает (протестировано):
type nul | more /e /p
Это преобразует изолированные переводы строки в комбинацию перевода строки возврата каретки.
echo hello \n world
- person jeb; 20.01.2020
echo Yes&echo No
- person   schedule 15.08.2019