Другое

Как вывести перевод строки в batch-файле – Полное руководство

Изучите несколько способов вставки переводов строки в выводе batch-файла: переменные, команды echo и специальные символы. Полное руководство с практическими примерами.

Как вывести перевод строки в batch‑файле?

Я хочу вставить перевод строки в вывод batch‑файла, как \n работает в других языках программирования. Например, хотелось бы получить что‑то вроде:

bat
echo hello\nworld

чтобы вывод был:

hello
world

Какой правильный синтаксис для создания переводов строк в выводе batch‑файла?

Чтобы вывести перевод строки в пакетном файле, можно использовать несколько методов, включая создание переменных для перевода строки, команду echo. или специальные символы. Наиболее распространённый подход — определить переменную перевода строки, используя шаблон set NL=^^^, а затем использовать %NL% в командах echo для вставки разрывов строк.


Содержание


Использование переменных для перевода строки

Самый гибкий способ создания переводов строк в пакетных файлах — определить переменную перевода строки, которую можно использовать по всему скрипту. Такой подход позволяет легко вставлять разрывы строк в любом месте вывода.

Базовое определение переменной перевода строки

batch
@echo off
REM Создание переменной перевода строки (необходимы две пустые строки!)
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%

REM Пример использования:
echo There should be a newline%NL%inserted here.

Важно: После set NLM=^ должны быть две пустые строки, и они должны быть включены точно так, как показано.

Альтернативный метод определения переменной

batch
@echo off
setlocal EnableDelayedExpansion
(set \n=^ %=Не удаляйте эту строку=% )

REM Использование:
echo Hi!\n!Aticleworld
pause

Этот метод создаёт переменную перевода строки, которую можно использовать с синтаксисом \n, аналогичным другим языкам программирования.

Использование переменных в сложном выводе

batch
@echo off
setlocal EnableDelayedExpansion
REM Создаём переменную перевода строки
set NL=^^^

REM Определяем сообщение с переводами строк
set message=Hello%NL%This is line 2%NL%And this is line 3

echo Your message:%NL%%message%

Простые методы пустой строки

Для создания простых пустых строк можно использовать команду echo с различными вариантами синтаксиса.

Базовая пустая строка с echo.

batch
@echo off
echo First line.
echo.
echo Third line (with blank line above).

Это создаёт пустую строку между первой и третьей строками вывода.

Использование echo: для улучшенной производительности

Согласно SS64, синтаксис echo: обеспечивает лучшую производительность, чем echo.:

batch
@echo off
echo First line.
echo:
echo Third line.

Несколько пустых строк

batch
@echo off
echo Starting text.
echo.
echo.
echo More text after two blank lines.

Методы с использованием специальных символов

Использование ASCII-символа перевода строки

Можно вставить реальный символ перевода строки, используя Alt+10 в вашем пакетном файле:

batch
@echo off
echo New-line detected right^<--- HERE!

Метод возврата каретки

batch
@echo off
echo This line will have a carriage return followed by new content.
echo.

Продвинутые техники

Использование циклов for для создания нескольких строк

Согласно Delft Stack, можно использовать циклы for, чтобы создать несколько пустых строк:

batch
@echo off
echo This is the first line.
for /L %%i in (1,1,3) do echo.
echo This appears after three blank lines.

Подход с функцией/подпрограммой

Создайте переиспользуемую функцию для обработки переводов строк:

batch
@echo off
setlocal EnableDelayedExpansion

REM Определяем функцию перевода строки
:mlecho
set text=%*
set nl=^
echo %text:\n=!nl!%
goto:eof

REM Использование:
call:mlecho "Hello\nI'm your computer"

Метод передачи переводов строк внешним программам

Согласно Super User, можно передать переводы строк внешним исполняемым файлам:

batch
@echo off
REM Определяем переменную перевода строки
(set \n=^^^ %=пусто, не удаляйте эту строку =% ^ %=пусто, не удаляйте эту строку =% )

REM Передаём внешней программе
myApp.exe Line1%\n%Line2

Практические примеры

Создание многострочного сообщения

batch
@echo off
setlocal EnableDelayedExpansion
REM Определяем перевод строки
set NL=^^^

REM Создаём форматированное сообщение
echo ============================================%NL%
echo           System Information%NL%
echo ============================================%NL%
echo Computer: %COMPUTERNAME%%NL%
echo User: %USERNAME%%NL%
echo Date: %DATE%%NL%
echo Time: %TIME%%NL%
echo ============================================

pause

Логирование с отметками времени и переводами строк

batch
@echo off
setlocal EnableDelayedExpansion
set NL=^^^
set LOG_FILE=app.log

REM Запись в лог с отметками времени и переводами строк
echo [%DATE% %TIME%] Application started%NL% >> "%LOG_FILE%"
echo [%DATE% %TIME%] Initializing components%NL% >> "%LOG_FILE%"
echo [%DATE% %TIME%] Ready for use%NL% >> "%LOG_FILE%"

echo Log entries created successfully.
pause

Удобное меню с переводами строк

batch
@echo off
setlocal EnableDelayedExpansion
set NL=^^^

echo Welcome to the Menu System%NL%
echo ---------------------------%NL%
echo 1. Option One%NL%
echo 2. Option Two%NL%
echo 3. Option Three%NL%
echo 4. Exit%NL%
echo ---------------------------%NL%
set /p choice=Enter your choice: 

if "%choice%"=="1" echo You selected Option One%NL%Processing...
if "%choice%"=="2" echo You selected Option Two%NL%Processing...
if "%choice%"=="3" echo You selected Option Three%NL%Processing...
if "%choice%"=="4" echo Exiting program...%NL%Goodbye!

pause

Проблемы производительности

Сравнение методов

Разные методы создания переводов строк имеют различную производительность:

  • echo. vs echo:: Согласно SS64, echo: обеспечивает лучшую производительность, чем echo.
  • Методы переменных: Использование заранее определённых переменных перевода строки более эффективно, чем создание переводов строк «на лету».
  • Вызовы функций: Хотя функции переиспользуемы, они имеют накладные расходы по сравнению с прямым использованием переменных.

Лучшие практики

  1. Предпочитайте переменные вместо множества команд echo для лучшей производительности.
  2. Используйте echo: вместо echo. когда это возможно, для ускорения.
  3. Определяйте переменную перевода строки один раз в начале скрипта.
  4. Избегайте сложной вложенной логики переводов строк, которая может затруднить поддержку.

Заключение

Создание переводов строк в пакетных файлах требует понимания нескольких подходов, поскольку скрипты Windows batch не имеют встроенного эквивалента \n, как в других языках программирования. Ключевые методы включают:

  1. Использование переменных перевода строки (set NL=^^^) для гибкой вставки строк по всему скрипту.
  2. Простые пустые строки с echo. или echo: для базового форматирования.
  3. Специальные символы, такие как Alt+10, для вставки реальных символов перевода строки.
  4. Продвинутые техники, такие как циклы for и функции, для сложного форматирования вывода.

Для большинства случаев метод переменной перевода строки обеспечивает лучший баланс гибкости и производительности. Не забывайте включать требуемые пустые строки при определении переменных перевода строки и рассматривать использование echo: вместо echo. для улучшения производительности в пакетных скриптах, требующих большого объёма вывода.


Источники

  1. How can I echo a newline in a batch file? - Stack Overflow
  2. How can I echo a newline in a batch file? - w3schools
  3. windows - How can I insert a new line in a cmd.exe command? - Super User
  4. How to echo a new line in batch file - Aticleworld
  5. New Line in Batch Script | Delft Stack
  6. windows - Is it possible to put a new line character in an echo line in a batch file? - Stack Overflow
  7. How to echo a newline in Batch File - YouTube
  8. Can I pass a newline in a command line parameter to a Windows executable in a batch file? - Super User
  9. How to Create a Blank Line in a Batch File - Computer Hope
  10. windows - Line break in batch file - Server Fault
Авторы
Проверено модерацией
Модерация