Вопрос или проблема
У меня есть строка переменной длины, начинающаяся со 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!
Как это работает?
-
Удаление разделителей: Мы заменяем "START" и "END" на пустое значение, используя
^
, что позволяет создать новую строку на основе оригинальной. -
Фор-цикл: Цикл
FOR
используется для перебора строк, пропуская первую строку и игнорируя строки, которые начинаются с определенного символа (в данном случае — конец строки). -
Создание результата: Если переменная
result
еще не определена, она инициализируется значением текущей строки из цикла, что позволяет получить нужную часть текста.
Заключение
С помощью упомянутых методов вы можете извлечь данные между двумя разделителями из строк переменной длины в пакетных файлах Windows. Этот подход является надёжным и может быть адаптирован для различных сценариев обработки текста.
Рекомендуется протестировать решения на примерах, чтобы убедиться в их правильной работе для вашей специфики.