@Drovosek01

Как лучше всего хранить многострочный текст в .cmd или .bat файле?

Есть многострочный текст, например такой
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
  do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
  esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
  in culpa qui officia deserunt mollit anim id est laborum.

Это просто пример, строки другие и их больше, но в начале некоторых строк есть пробелы и их необходимо сохранить.

В зависимости от условий, используя нативный для Windows код в .cmd или .bat, необходимо создать текстовый файл с содержимым в виде всего этого многострочного текста.

Как это лучше всего сделать?

P.S.
Если я правильно понимаю в cmd нет способов хранить строку с разделителями типа \n или \r\n и необходимо будет все эти стандартные разделители заменить на нестандартные типа ";;;" или что-то иное уникальное в тексте.
Потом эту 1 длинную строку с такими разделителями поместить в переменную.
И при необходимости "распаковать" такую строку в файл.

Как это сделать и есть ли способы лучше?
  • Вопрос задан
  • 510 просмотров
Пригласить эксперта
Ответы на вопрос 3
wisgest
@wisgest
Не ИТ-специалист
Вкратце (возможно, когда-нибудь дополню ответ, если вспомню какие либо тонкости и соберусь с силами).

Чтобы разбить команду на несколько строк надо в конце каждой строки добавить символ ^. Если после него будет идти пустая строка, то в команду будет вставлен перевод строки.

Пример.
echo ^
Hello,^

    world!

выведет
Hello,
    world!

Если использовать отложенное раскрытие переменных, то можно вывести текст, сохранённый в переменной:
setlocal enabledelayedexpansion
set A=^
Hello,^

  world!
echo !A!

В тексте надо удваивать знаки процента, экранировать символом ^ специальные символы (его самого, символы перенаправления, соединения команд, закрывающую скобку (внутри составных команд), желательно, кавычку…), дважды экранировать восклицательные знаки при отложенном раскрытии переменных, если текст между ними может быть воспринят как имя переменной… В общем, упражняйтесь.

Ещё можете посмотреть тему CMD/BAT: Возможность создания heredoc. Также, например, в теме CMD/BAT: Пакетные макросы с параметрами рассматривается создание переменных (CR и LF), содержащих символы перевода строки и возврата каретки:
spoiler
:: Определяет переменную ВОЗВРАТ КАРЕТКИ (используется как !CR!)
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"

:: Определяет переменную ПЕРЕВОД СТРОКИ (используется как !LF!)
set LF=^


:: Две пустые строки сверху важны - не удалять!
Ответ написан
Комментировать
mindtester
@mindtester
http://iczin.su/hexagram_48
- уточните задачу
- есть команды типа type
- есть и другие методы, типа перенаправление ввода/вывода

ps, а если использовать wsl, то можно с помощью sed (и взаимной доступности путей и скриптов) вытворять вообще любое безумие
Ответ написан
@kalapanga
необходимо создать текстовый файл с содержимым в виде всего этого многострочного текста

Что мешает создать этот файл заранее, положить его рядом с батником, при необходимости копировать его туда, где Вы его хотели создавать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы