Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разбить строку, содержащую кавычки, на несколько.

Ответить
Настройки темы
CMD/BAT - Разбить строку, содержащую кавычки, на несколько.

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, форумчане!
Прошу помощи в разработке скрипта.

Имеется строка вида:

Код: Выделить весь код
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
В основной строке могут быть любые символы, включая кавычки.

Отправлено: 20:55, 26-05-2022

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Например, так:
Код: Выделить весь код
1|Russian|Dub, Blu-ray CEE2|Ukrainian|DVO3|Russian|MVO, "DVD Magic"4|Russian|VO, Gotlib5|English

-split '(?=\d+\|)'
Более того, можно посмотреть и возможности самого экспорта MediaInfo по переносу строк, например, попробовать так:
Код: Выделить весь код
--Output=Audio;%StreamKindPos%|%Language/String%|%Title%\n
Upd: да, так работает, можно обойтись вообще без доп. обработки.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 27-05-2022 в 18:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 27-05-2022 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


ioSIS,
Цитата ioSIS:
Нужно разбить ее на строки по разделителю "}}}", чтобы получилось: »
А зачем это нужно? Тут основная проблема - наличие |.
Я сымитировал вашу утилиту командой More c выдачей строки из текстового файла. Вот два варианта, если устроит выдача результата в кавычках.
Код: Выделить весь код
@Echo Off
cls
	Echo Вариант 1
	For /f "usebackq tokens=1,2,3,4,5 delims=}" %%i In (`More яяяю.txt`) Do (
		Echo "%%i"
		Echo "%%j"
		Echo "%%k"
		Echo "%%l"
		Echo "%%m"
	)

	Echo. &Echo Вариант 2
	For /f "usebackq tokens=1,2,3,4,5 delims=}" %%i In (`More яяяю.txt`) Do (
		Set "@@a1="%%i""
		Set "@@a2="%%j""
		Set "@@a3="%%k""
		Set "@@a4="%%l""
		Set "@@a5="%%m""
	)
	Echo %@@a1%
	Echo %@@a2%
	Echo %@@a3%
	Echo %@@a4%
	Echo %@@a5%
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:57, 27-05-2022 | #12


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Я сымитировал вашу утилиту командой More c выдачей строки из текстового файла. Вот два варианта, если устроит выдача результата в кавычках.
Код: »
Не устроит)
Плюс, у Вас можно вывести только 5 строк, а их в выводе команды может быть сколько угодно.

Воспользовался советом DJ Mogarych на счет \n в выводе MediaInfo.exe. Но это частный случай с этой утилитой.

Вопрос в общем остается открытым:
Как с помощью CMD разбить строку на подстроки по разделителю, если она содержит спец-символы?

Отправлено: 12:44, 28-05-2022 | #13


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата ioSIS:
Вопрос в общем остается открытым»
Вам же уже дали готовый код с решением. А cmd устаревший язык, который не используется уже более 20 лет. Не просто так его разработку забросили в 2000г. Microsoft выпустили вместо него PowerShell.
Если так будет понятнее, то вы спрашиваете "как на черно-белом ламповом тв запустить приложение кинопоиск и включить мстителей в 4к", а вам отвечают, что таких тв уже нет ни у кого, и вам нужен смарт-тв с приложениями и 4к разрешением.

Отправлено: 13:07, 28-05-2022 | #14


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Fors1k:
Вам же уже дали готовый код с решением. А cmd устаревший язык, который не используется уже более 20 лет. Не просто так его разработку забросили в 2000г. Microsoft выпустили вместо него PowerShell. »
Похоже, Вы правы, цепляться за CMD при наличии более современных и удобных средств - вряд ли разумно.

Вот еще подсказали способ разбивать строку со спецсимволами с помощью WSH. Может пригодиться кому. Код сохранить в .bat и запускать как обычно:

Код: Выделить весь код
@set @x=0 /*
@echo off 
chcp 65001 >nul
set attr="%%StreamKindPos%%|%%Language/String%%|%%Title%%}}}"
pushd "C:\Program Files\MediaInfo\"
FOR /F "usebackq delims=" %%i IN (`mediainfo.exe --Output^=Audio^;%attr% %1`) DO ( set audio=%%i)
popd
set "audio=%audio:"=\*quotes*\%"
cscript /nologo /e:javascript %0 "%audio%"
goto :EOF
 */
var output=WScript.Arguments(0).replace(/\\\*quotes\*\\/gi,'"').replace(/}}}/gi,'\n').slice(0,-1);
WScript.Echo(output);

Отправлено: 22:49, 28-05-2022 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разбить строку, содержащую кавычки, на несколько.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Разбить строку на части и выбрать нужную часть в переменную virginkoks Скриптовые языки администрирования Windows 8 15-12-2020 05:15
CMD/BAT - Разбить строку на две подстроки по последнему символу \ kokos76 Скриптовые языки администрирования Windows 2 09-01-2016 09:32
Flash - разбить флэшку на несколько разделов Юzverь Накопители (SSD, HDD, USB Flash) 48 11-11-2015 12:04
Flash - Разбить на несколько разделов. nokogerra Накопители (SSD, HDD, USB Flash) 0 21-09-2015 19:58
Любой язык - [решено] Как разбить одну строку на много строк KooDI Скриптовые языки администрирования Windows 56 06-08-2013 23:26




 
Переход