Извлечь подстроку между 2 строками - PullRequest
0 голосов
/ 25 апреля 2018

Вот мой сегмент кода:

set CMS_SQL="cms91_to_913.json cms913_to_9132.json cms9132_to_9133.json cms9133_to_10100.json"
set CMS_FROM_VERSION="cms913_"
set CMS_TO_VERSION="to_9133.json"

Обе CMS_FROM_VERSION и CMS_TO_VERSION являются переменными

Я хочу извлечь подстроку "cms913_to_9132.json cms9132_to_9133.json" из %CMS_SQL%

Просто хочу получить подстроку между %CMS_FROM_VERSION% and %CMS_TO_VERSION%, содержащую эти два значения переменной

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

Как извлечь подстроку между этими двумя строками? Спасибо

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

с небольшим изменением шаффла:

:: SO50021845.cmd
Echo off
set "CMS_SQL=cms91_to_913.json cms913_to_9132.json cms9132_to_9133.json cms9133_to_10100.json"
set "FROM=cms913_"
set "TO=to_9133.json"

:: Check if CMS_SQL contains FROM and TO
Echo:%CMS_SQL%|Findstr /i "%FROM%.*%TO:.=\.%" >NUL 2>&1 || (
  Echo string doesn't contain FROM and TO & Pause & Exit /b
)
:: Remove part before FROM
Call set "Result=%%CMS_SQL:*%FROM%=%FROM%%%"
:: extract part to remove behind TO
Call set "Remove=%%Result:*%TO%=%%"
:: remove part behind TO
Call set "Result=%%Result:%Remove%=%%"

Echo %Result%

Пример вывода:

cms913_to_9132.json cms9132_to_9133.json
0 голосов
/ 25 апреля 2018

сделать это с заменой:

@echo off
set "string=AB134SSPQS"
set "substr=%string:AB=%"
set "substr=%substr:QS=%"
echo %substr%
0 голосов
/ 25 апреля 2018

Чтобы повторить мой комментарий, следующее не знает или не учитывает длину подстроки, оно просто удаляет первые два и два последних символа из строки:

Set "String=AB134SSPQS"
Set "subString=%String:~2,-2%"
Echo %subString%

Если AB и QS предшествуют и следуют за требуемой подстрокой, но не обязательно начинают и начинают строку, то, возможно, это будет работать для вас:

Rem Looking for a file.txt substring preceded by AB and succeeded by QS
@Echo Off
For /F "Delims=" %%A In ('FindStr /I "AB.*QS" "file.txt"') Do Call :Sub "%%A"
Pause
GoTo :EOF

:Sub
Set "Line=%~1"
Set "Up2Sub=%Line:*AB=%"
Set "SubStr=%Up2Sub:QS="&:"%"
Echo %SubStr%
Exit /B

Мне пришлось составить сценарий, (см. Rem) , потому что вы не предоставили достаточно информации для обоснования ответа.

Редактировать

Set "String=AB134SSPQS"
Set "Up2Sub=%String:*AB=%"
Set "SubStr=%Up2Sub:QS="&:"%"
Echo %SubStr%

Edit2

Как указано в вашем другом вопросе и добавлено здесь на основе вашего теперь измененного вопроса, вот один из методов:

@Echo Off
Set "CMS_SQL=cms91_to_913.json cms913_to_9132.json cms9132_to_9133.json cms9133_to_10100.json"
Set "CMS_FROM_VERSION=cms913_"
Set "CMS_TO_VERSION=to_9133.json"
For /F "Delims=" %%A In ('Echo %%CMS_SQL:*%CMS_FROM_VERSION%^=%%'
) Do Set "SUBSTRING=%CMS_FROM_VERSION%%%A"
For /F "Delims=" %%A In ('Echo %%SUBSTRING:%CMS_TO_VERSION%^=^&:%%'
) Do Set "SUBSTRING=%%A%CMS_TO_VERSION%"
Set SUBSTRING
Pause
0 голосов
/ 25 апреля 2018

В Windows cmd, это просто:

set "result=%A:~2,6%"
echo %result%

но, возможно, вы имеете в виду настоящую DOS?

(при условии, что вы хотите 6 символов , starting at character 2 when character 0 is the first in a string-variable named a` - регистр переменных не имеет значения)

См. set /? в приглашении для документации (или любой из тысяч записей в SO)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...