Как извлечь часть строки между 2 разделителями в пакетном файле Windows?

Вопрос или проблема

У меня есть строка переменной длины, начинающаяся со START и заканчивающаяся на END в качестве разделителей.

Я хочу извлечь строку между START и END.
Я пробовал сделать это

SET _result=%String:~6,-4%
ECHO %_result%

Это удаляет первые 5 символов, но не последние 3 символа, как я хотел.

Предположим, _result=STARTblahblahblahEND
Я получаю вывод как blahblahblahEND

Что я хочу:

blahblahblah

Вы можете использовать опции подстрок. Сработает ли что-то подобное этому?

SET TEXT=STARTblahblahblahEND
SET SUBSTRING=%TEXT:~5,-3%
echo %SUBSTRING%

Это должно сработать, если целевая строка не многострочная:

@echo off
setlocal EnableDelayedExpansion
set "str="
set "string=blablablaSTART123ENDblablabla"

set string=!string:START=^

!
set string=!string:END=^

!

FOR /F skip^=1eol^= %%S in ("!string!") do if NOT DEFINED str set "str=%%S"
echo(!str!

Как это работает?

^
%= РАСПАКОВЫВАЕТСЯ В НИЧТО =%
%= РАСПАКОВЫВАЕТСЯ В НИЧТО =%

распаковывается в один LF.

skip^=1eol^= отключает eol

Ответ или решение

Чтобы извлечь часть строки между двумя разделителями в пакетных файлах Windows, вам необходимо воспользоваться встроенными возможностями обработки строк. В данном случае вы хотите получить строку между "START" и "END". Вот детальное руководство по решению данной задачи.

Шаг 1: Определение переменной

Прежде всего, вам нужно установить строку, в которой будут находиться ваши делимитеры (разделители). Допустим, ваша строка выглядит так:

SET "string=STARTblahblahblahEND"

Шаг 2: Удаление разделителей

Вам необходимо удалить сами делимитеры "START" и "END" из строки. Это можно сделать с помощью команды SET, но с правильной адресацией символов.

Метод 1: Использование подстрок

Для извлечения части строки можно использовать синтаксис подстрок:

SET "substring=%string:~5,-3%"
ECHO %substring%

Здесь ~5 позволяет пропустить первые 5 символов (то есть "START"), а ,-3 позволяет убрать последние 3 символа (то есть "END"). Таким образом, переменная substring будет содержать нужную вам часть строки.

Шаг 3: Использование циклов для многострочных строк

Если ваша строка может быть многострочной, следует воспользоваться циклом FOR. Это позволит более гибко обрабатывать текст:

@echo off
setlocal EnableDelayedExpansion
set "result="
set "string=blablablaSTART123ENDblablabla"

set "string=!string:START=^!"

set "string=!string:END=^!"

FOR /F "skip=1 eol=" %%S in ("!string!") do (
    if NOT DEFINED result (
        set "result=%%S"
    )
)

echo(!result!

Как это работает?

  1. Удаление разделителей: Мы заменяем "START" и "END" на пустое значение, используя ^, что позволяет создать новую строку на основе оригинальной.

  2. Фор-цикл: Цикл FOR используется для перебора строк, пропуская первую строку и игнорируя строки, которые начинаются с определенного символа (в данном случае — конец строки).

  3. Создание результата: Если переменная result еще не определена, она инициализируется значением текущей строки из цикла, что позволяет получить нужную часть текста.

Заключение

С помощью упомянутых методов вы можете извлечь данные между двумя разделителями из строк переменной длины в пакетных файлах Windows. Этот подход является надёжным и может быть адаптирован для различных сценариев обработки текста.

Рекомендуется протестировать решения на примерах, чтобы убедиться в их правильной работе для вашей специфики.

Оцените материал
Добавить комментарий

Капча загружается...