GCRaistlin

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Выше я показывал, как задать переменную, после однократного %-раскрытия которой получается символ перевода строки (Line Feed, 0x0A): Код: set _nl=^^^ ^ rem Don't delete 2 blank lines above echo abc%_nl%def | Можно определить и переменную, которая оставит 0x0A после двух последовательных %-раскрытий (актуально для макросов): Код: set _nl$=^^^^^^^ ^ ^^^ ^ rem Don't delete 2 blank lines above set TestMacro=echo %%#%_nl$%%%$ for /f "tokens=1,2" %%# in ("abc def") do %TestMacro% | Фокус основывается на том, что ^ в конце строки делает двойную работу: не только убирает символ(ы) конца строки, но и экранирует первый символ в следующей строке: Код: Если следующая строка пуста, т. е. содержит только символ(ы) конца строки (\r\n или \n), то \r, если есть, будет отброшено и останется \n. Поэтому _nl выше получается длиной 3 символа (0x0A условно обозначен буквой L): ^LL. При %-раскрытии первый 0x0A съедается кареткой, и остается 0x0A: Код: То же правило действует и при задании переменной _nl, только тут в левой части L обозначает сочетание \r\n: Код: Ну и, наконец, задание _nl$: Код: ^^^^^^^LL^LL^^^LL^L -> ^^^LL^LL | Копировать код нужно из режима редактирования, иначе движок может добавить пробелы куда не нужно.
---------- Magically yours Raistlin |
| Всего записей: 4207 | Зарегистр. 18-04-2005 | Отправлено: 16:58 19-08-2023 | Исправлено: GCRaistlin, 19:43 19-08-2023 |
|