Як ви можете вставити новий рядок з вихідного файлу?
Я хочу зробити щось на кшталт:
echo hello\nworld
Який результат:
hello
world
echo Yes&echo No
Як ви можете вставити новий рядок з вихідного файлу?
Я хочу зробити щось на кшталт:
echo hello\nworld
Який результат:
hello
world
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 hello
echo.
echo world
echo "Makefile contents (which has \n)" > Makefile
Кілька ехо", це не спрацює
(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
а потім echo line 2 >> Makefile
. Використання >>
причин призводить до того, що вихід буде доданий до файлу, що є саме поведінкою, яка вам потрібна для цього випадку.
Тут ви йдіть, створіть .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, очевидно.
set nl=^&echo.
, тоді просто echo hello %nl% world
дає такий же ефект.
Існує стандартна функція echo:
в cmd / bat-файлах для запису порожнього рядка, який імітує новий рядок у вашому cmd-виході:
@echo off
@echo line1
@echo:
@echo line2
Вихід цитованого вище cmd-файлу:
line1
line2
echo(
. Схоже, це може спричинити проблеми, але насправді працює прекрасно. Усі інші форми мають принаймні одну ситуацію, коли команда не виконуватиметься за бажанням.
ECHO(
не вдасться.
echo
, і які їх наслідки?"
Як і відповідь Кена, але із застосуванням затримки розширення.
setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)
echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"
Спочатку створюється один символ передачі рядка та присвоюється змінній \ n.
Це працює так, як карета в кінці рядка намагається уникнути наступного символу, але якщо це Linefeed, він ігнорується, а наступний символ читається та уникається (навіть якщо це також передача рядків).
Тоді вам потрібен третій рядок для завершення поточної інструкції, інакше третій рядок буде доданий до змінної 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
щоб запобігти інтерпретації нових рядків.
echo,
echo;
echo(
echo/
echo+
echo=
та галерею шахраїв echo.
echo\
echo:
. Тепер, якби ви пояснювали, чому на святому чортові ці роботи, я б вам завдячував безкоштовним пивом.
echo.
Достатньо сказано.
Якщо вам це потрібно в одному рядку, використовуйте &
. Наприклад,
echo Line 1 & echo. & echo line 3
виводиться як:
Line 1
line 3
А тепер скажіть, що вам хочеться чогось більш фантазійного, ...
set n=^&echo.
echo hello %n% world
Виходи
hello
world
Тоді просто киньте кожен %n%
раз, коли ви хочете новий рядок у виголошенні заяви. Це ближче до \n
використовуваного на різних мовах.
Зламатися
set n=
встановлює змінну n
рівну:
^
Вимикає наступний символ, який слід слідувати:
&
Значить виконувати ще одну команду в тому ж рядку. Нас не хвилює рівень помилок (її ехо-заява для крику вголос), тому не &&
потрібно.
echo.
Продовжує ехо-заяву.
Все це працює, тому що ви можете фактично створювати змінні, які є кодом, і використовувати їх усередині інших команд. Це щось на зразок функції гетто, оскільки партія не є найсучаснішою з мов сценаріїв оболонок. Це працює лише через те, що пакетне використання змінних, що не використовується, не визначає природних точок, символів, поплавків, рядків тощо.
Якщо ти хитрий, ти можеш змусити це працювати з іншими речами. Наприклад, використовуючи його для відлуння вкладки
set t=^&echo. ::there are spaces up to the double colon
echo.
оскільки він вперше намагається знайти файл з таким іменем. Використовуйте інші пунктуаційні знаки, такі якecho,
Коли ехо щось переспрямовує на файл, кілька команд ехо не працюватимуть. Я думаю, що, можливо, переспрямовувач ">>" - це хороший вибір:
ехо привіт> темп світ ехо >> темп
(echo hello && echo world) > temp
згаданий Натаном Дж. Брауер у коментарі до (поточної) прийнятої відповіді працює.
Подібно до того, як пропонує Грімтрон - ось короткий приклад його визначення:
@echo off
set newline=^& echo.
echo hello %newline%world
C:\>test.bat
hello
world
echo hello %newline%world
рядок, між ними немає пробілів.
echo "Hello %newline% world"
не вдається, як це всередині цитат. Тому що це не справжній новий рядок.
Ви також можете зробити так,
(for %i in (a b "c d") do @echo %~i)
Вихід буде,
a
b
c d
Зауважте, що коли це поміщено у пакетний файл, '%' подвоюється.
(for %%i in (a b "c d") do @echo %%~i)
Якщо хтось приходить сюди, тому що вони хочуть повторити порожній рядок із файлу makeing MINGW, я використав
@cmd /c echo.
просто використання echo.
викликає жахливе process_begin: CreateProcess(NULL, echo., ...) failed.
повідомлення про помилку.
Я сподіваюся, що це допоможе принаймні ще одній людині там :)
Якщо вам потрібно використовувати відомі \ 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 для включення знаків оклику, які розширюють змінні при виконанні. І підміняє виконання \ п з новим рядком вмісту (шукаю синтаксис в довідковому наборі ). Ми, звичайно, можемо використовувати ! 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 підрядки.
Це працювало для мене, не потрібно затягувати розширення:
@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
додає новий рядок до кінця рядка.
Щоб почати новий рядок у пакетному пакеті, все, що вам потрібно зробити, це додати "echo [", наприклад:
echo Hi!
echo[
echo Hello!
echo[.bat
echo.
це погане рішення.
echo.
. Очікування на те, що користувачі вашого сценарію видалять файли з їхньої системи лише тому, що для вашого сценарію потрібен новий рядок, для мене не виглядає як хороший дизайн.
Рішення Кен та Джеб добре працюють.
Але нові рядки створюються лише символом LF, і мені потрібні символи CRLF (версія Windows).
Для цього в кінці сценарію я перетворив LF в CRLF.
Приклад:
TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
Ви можете використовувати @echo
(@echo + [пробіл] + [нероздільний простір])
Примітка: нерозривний простір можна отримати за допомогою Alt + 0160
Сподіваюся, це допомагає :)
[редагувати] Хм ти маєш рацію, мені це було потрібно в Makefile, він чудово працює там. Я думаю, моя відповідь не пристосована до пакетних файлів ... Моє погано.
ECHO ist eingeschaltet (ON).
не порожній рядок, спробував у cmd-prompt