Как вы можете вставить новую строку из вывода командного файла?
Я хочу сделать что-то вроде:
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.
echoed другой программе.
- 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