[CMD] Разбить строку, содержащую кавычки, по разделителю

ioSIS

Новый пользователь
Сообщения
2
Реакции
0
Здравствуйте.
Имеется строка вида:
Код:
1|Russian|Dub, Blu-ray CEE}}}2|Ukrainian|DVO}}}3|Russian|MVO, "DVD Magic"}}}4|Russian|VO, Gotlib}}}5|English}}}

Нужно разбить ее на строки по разделителю "}}}", чтобы получилось:
Код:
1|Russian|Dub, Blu-ray CEE
2|Ukrainian|DVO
3|Russian|MVO, "DVD Magic"
4|Russian | VO, Gotlib
5|English

В основной строке могут быть любые символы, включая кавычки.
 
cmd плохо подходит для этой задачи, максимум можно разбить по разделителю } или нескольким } идущим подряд:
Код:
echo off
setlocal enableextensions
setlocal enabledelayedexpansion
set "str=1|Russian|Dub, Blu-ray CEE}}}2|Ukrainian|DVO}}}3|Russian|MVO, "DVD Magic"}}}4|Russian|VO, Gotlib}}}5|English}}}"
:do
for /f "delims=} tokens=1*" %%a in ("!str!") do echo %%a& if "%%b" neq "" (set "str=%%b"& goto do)
pause
 
Вкину свое 5 копеек, поддержу коллегу cmd плохо подойдет к данной задаче, попробуйте например powershell
Поправлю код немного, а то там есть пробелы между строк

PowerShell:
[string]$string = '1|Russian|Dub, Blu-ray CEE}}}2|Ukrainian|DVO}}}3|Russian|MVO, "DVD Magic"}}}4|Russian|VO, Gotlib}}}5|English}}}'

foreach ($stroka in $string.Split("}}}"))
{
   $x =  $stroka | Where-Object { $_ }
   $x
}
 
Последнее редактирование:
cmd плохо подходит для этой задачи, максимум можно разбить по разделителю } или нескольким } идущим подряд:
Код:
echo off
setlocal enableextensions
setlocal enabledelayedexpansion
set "str=1|Russian|Dub, Blu-ray CEE}}}2|Ukrainian|DVO}}}3|Russian|MVO, "DVD Magic"}}}4|Russian|VO, Gotlib}}}5|English}}}"
:do
for /f "delims=} tokens=1*" %%a in ("!str!") do echo %%a& if "%%b" neq "" (set "str=%%b"& goto do)
pause

А как в Вашем варианте вывести знак "!", если он будет встречаться в строке?
 
CMD/BATCH:
echo off

set "str=1|Rus!sian|Dub, Blu-ray CEE}}}2|Ukrainian|DVO}}}3|Russian|MVO, "DVD Magic"}}}4|Russian|VO, Gotlib}}}5|English}}}"

:m1

for /f "tokens=1* delims=}" %%a in ("%str%") do (

echo.%%a

set str=%%b

goto m1

)

pause

exit
 
Последнее редактирование модератором:
Назад
Сверху Снизу