Как вы можете вставить новую строку из вывода командного файла?
Я хочу сделать что-то вроде:
echo hello\nworld
Что бы вывести:
hello
world
windows
batch-file
newline
Брайан Р. Бонди
источник
источник
echo Yes&echo No
Ответы:
echo hello & echo.world
Это означает, что вы можете определить
& echo.
как константу для новой строки\n
.источник
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
echo(
для повышения производительности (но все же без места). Расширенное обсуждение других персонажей и их достоинств / недостатков в ECHO. Не в состоянии дать текст или пустую строку - Вместо этого используйте ECHO /Использование:
источник
echo "Makefile contents (which has \n)" > Makefile
несколько эхо, это не сработает(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
а потомecho line 2 >> Makefile
. Использование>>
аргументов приводит к добавлению вывода в файл, что является именно тем поведением, которое необходимо для этого случая.Вот, пожалуйста, создайте файл .bat со следующим:
Вы должны увидеть результат, подобный следующему:
Очевидно, вам нужен только код между операторами REM.
источник
set nl=^&echo.
, тогда простоecho hello %nl% world
дает тот же эффект.В
echo:
cmd / bat-файлах есть стандартная функция записи пустой строки, которая эмулирует новую строку в вашем cmd-выходе:Вывод приведенного выше cmd-файла:
источник
echo(
. Похоже, это может вызвать проблемы, но на самом деле работает отлично. Все другие формы имеют по крайней мере одну ситуацию, когда команда не будет работать так, как нужно.ECHO(
не получается.echo
и каковы их эффекты?»Как и ответ Кена, но с использованием отложенного расширения.
Сначала создается отдельный символ перевода строки и присваивается переменной \ n.
Это работает, когда каретка в конце строки пытается экранировать следующий символ, но если это перевод строки, он игнорируется, а следующий символ читается и экранируется (даже если это также перевод строки).
Затем вам нужен третий перевод строки для завершения текущей инструкции, иначе третья строка будет добавлена к LF-переменной.
Даже командные файлы имеют окончание строк с CR / LF, важны только LF, так как CR удаляются на этом этапе анализатора.
Преимущество использования отложенного раскрытия состоит в том, что вообще нет специальной обработки символов.
echo Line1%LF%Line2
потерпит неудачу, так как синтаксический анализатор прекратит синтаксический анализ на одной строке.Больше объяснений в
SO: длинные команды разбиты на несколько строк в пакетном файле Vista / DOS (.bat)
SO: Как интерпретатор сценариев команд Windows (CMD.EXE) анализирует сценарии?
Редактировать: избегать
echo.
Это не отвечает на вопрос, так как вопрос был об одном
echo
который может выводить несколько строк.Но, несмотря на другие ответы, которые предлагают использовать
echo.
для создания новой строки, следует отметить, чтоecho.
это наихудший вариант, поскольку он очень медленный и может полностью потерпеть неудачу, так как cmd.exe ищет файл с именемECHO
и пытается его запустить.Для печати только пустой строки, вы можете использовать один из
Но использование
echo.
,echo\
илиecho:
следует избегать, так как они могут быть очень медленным, в зависимости от места , где скрипт будет выполняться, как сетевой диск.источник
call :pause line1!\n!line2
, начните подпрограмму сsetlocal EnableDelayedExpansion
и завершите ее,setlocal DisableDelayedExpansion
чтобы предотвратить преждевременную интерпретацию новой строки.echo,
echo;
echo(
echo/
echo+
echo=
и галерею жуликовecho.
echo\
echo:
. Теперь, если бы вы объяснили, почему, черт возьми, эти работы, я должен вам бесплатное пиво.echo.
Достаточно сказано.Если вам это нужно в одну строку, используйте
&
. Например,будет выводить как:
Теперь, скажем, вы хотите что-то немного более изумительное, ...
Выходы
Затем просто добавьте
%n%
каждый раз, когда вы хотите новую строку в выражении эха. Это ближе к тому, что вы\n
использовали на разных языках.Сломать
set n=
устанавливает переменнуюn
равной:^
Обнуляет следующий символ:&
Означает сделать другую команду в той же строке. Мы не заботимся об уровне ошибок (это выражение echo для громкого крика), поэтому нет&&
необходимости.echo.
Продолжает эхо-утверждение.Все это работает, потому что вы можете создавать переменные, которые являются кодом, и использовать их внутри других команд. Это похоже на функцию гетто, так как пакетная обработка не является самой продвинутой из языков сценариев оболочки. Это работает только потому, что в пакете плохо используются переменные, а не различие между целыми числами, символами, числами с плавающей запятой, строками и т. Д., Естественно.
Если вы хитры, вы можете заставить это работать с другими вещами. Например, используя его для отображения вкладки
источник
echo.
при первой попытке найти файл с таким именем. Используйте другие знаки препинания, такие какecho,
При отображении чего-либо для перенаправления в файл несколько команд echo не будут работать. Я думаю, что перенаправитель «>>» - хороший выбор:
источник
(echo hello && echo world) > temp
упомянутый Натаном Дж. Брауэром в комментарии к (текущему) принятому ответу работ.Точно так же, как предлагает Grimtron - вот быстрый пример, чтобы определить это:
Вывод
источник
echo hello %newline%world
строку, между ними нет пробелов.echo "Hello %newline% world"
терпит неудачу, поскольку это находится внутри кавычек. Потому что это не настоящий перевод строки.Если вам нужно поместить результаты в файл, вы можете использовать
источник
Вы также можете сделать это,
Выход будет,
Обратите внимание, что когда это помещается в пакетный файл, значение «%» удваивается.
источник
*
charЕсли кто-нибудь приходит сюда, потому что он хочет повторить пустую строку из make-файла MINGW, я использовал
@cmd /c echo.
просто используя
echo.
причины страшныеprocess_begin: CreateProcess(NULL, echo., ...) failed.
сообщение об ошибке.Я надеюсь, что это поможет по крайней мере еще одному человеку там :)
источник
Если нужно использовать известный \ n в строковых литералах, которые могут быть переданы в переменную, можно написать код, как в сценарии Hello.bat ниже:
Таким образом, многострочный вывод может быть подготовлен в одном месте, даже в другом файле сценария или во внешнем файле, и распечатан в другом.
Разрыв строки содержится в переменной новой строки . Его значение должно быть замещено после эха линии расширяется , поэтому я использую SETLOCAL enableDelayedExpansion для того, чтобы восклицательные знаки , которые расширяют переменные по исполнению. И подменяет выполнение \ п с новой строкой содержимого (ищу синтаксис в справочном наборе ). Конечно, мы могли бы использовать ! Newline! пока задаешь ответ но \ n удобнее. Он может быть передан извне (попробуйте Hello R2 \ nD2 ), где никто не знает имя переменной, содержащей разрыв строки (Да, Hello C3! Newline! P0работает так же).
Приведенный выше пример может быть уточнен для подпрограммы или отдельной партии, используемой как
call:mlecho Hi\nI'm your comuter
:Обратите внимание, что дополнительная обратная косая черта не помешает сценарию проанализировать подстроку \ n.
источник
Это сработало для меня, нет необходимости в задержке расширения:
Это пишет вывод как это:
источник
echo asdf >myfile.txt
даст те же результаты.echo
добавляет новую строку в конец строки.Чтобы начать новую строку в пакете, все, что вам нужно сделать, это добавить "echo [", вот так:
источник
echo[.bat
echo.
тоже плохое решение.echo.
. Ожидать, что пользователи вашего скрипта будут удалять файлы в своей системе только потому, что вашему скрипту нужна новая строка, для меня это не очень хороший дизайн.Решения Кена и Джеба работают хорошо.
Но новые строки генерируются только с символом LF, и мне нужны символы CRLF (версия для Windows).
Для этого в конце сценария я преобразовал LF в CRLF.
Пример:
источник
Вы можете использовать
@echo
(@echo + [пробел] + [незащищенный пробел])Примечание: незащищенное пространство можно получить с помощью Alt + 0160
Надеюсь, поможет :)
[править] Хм, вы правы, мне нужно было это в Makefile, там он отлично работает. Я думаю, мой ответ не адаптирован для пакетных файлов ... Мой плохой.
источник
ECHO ist eingeschaltet (ON).
не пустую строку, попробовал в cmd-приглашениеЭто решение работает (проверено):
Это преобразует отдельные строки перевода в комбинацию перевода строки возврата каретки.
источник
echo hello \n world
Я не могу сделать это проще, чем:
источник