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

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

Ответить
Настройки темы
CMD/BAT - [решено] Вытащить кусок из строки вида ... | ... | ... |

Пользователь


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

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


Изменения
Автор: Ксеноинженер
Дата: 26-04-2013
Уважаемые знатоки, подскажите пожалуйста, как из пачки строк вида:
Код: Выделить весь код
v2.20|Action=Allow|Active=FALSE|Dir=In|Profile=Domain|Profile=Private|Name=@{microsoft.windowscommunicationsapps_16.4.4206.722_x64__8wekyb3d8bbwe?ms-resource://microsoft.windowscommunicationsapps/resources/communicationsPackageName}|Desc=@{microsoft.windowscommunicationsapps_16.4.4206.722_x64__8wekyb3d8bbwe?ms-resource://microsoft.windowscommunicationsapps/resources/communicationsPackageName}|LUOwn=S-1-5-21-1311539638-139220600-4108783082-1001|AppPkgId=S-1-15-2-2551677095-2355568638-4209445997-2436930744-3692183382-387691378-1866284433|EmbedCtxt=@{microsoft.windowscommunicationsapps_16.4.4206.722_x64__8wekyb3d8bbwe?ms-resource://microsoft.windowscommunicationsapps/resources/communicationsPackageName}|Platform=2:6:2|Platform2=GTEQ|
вытащить значение Name= ... циклом (любым).
Есть идея?

Отправлено: 20:57, 14-04-2013

 

Ветеран


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

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


Как-то так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in ("0001.txt") do (
	set sLine=%%~i
	set sVar=!sLine:^|=" "!
	call :FoundName "!sVar!"
	
	echo [!FoundName!]
)

endlocal
exit /b 0

:FoundName
	setlocal enableextensions enabledelayedexpansion
	set sOut=%~0
	
:Repeat
	set sTwin=%~1

	if defined sTwin (
		if /i "%sTwin:~0,5%" == "Name=" (
			set "s%sTwin%"
		)
		shift
		goto :Repeat
	)
	
	endlocal & set %sOut:~1%=%sName%
	exit /b
Но лучше с текстом такого вида пользовать WSH.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:33, 14-04-2013 | #2



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

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


Ветеран


Contributor


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

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


Может быть эдак?
Код: Выделить весь код
@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=" %%s IN (`Type zzzzzzzz.txt`) DO (
	Set SS="%%s"
        Set SS=!SS:^|=" "!
	Set SS=!SS:*" "Name=Name!
	FOR /F "usebackq delims=}" %%L IN ('!SS!') DO Set String=%%L}
	Echo !String!
)
При этом выдастся на экране Name=@{......
Если Name= не надо, то
Код: Выделить весь код
@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=" %%s IN (`Type zzzzzzzz.txt`) DO (
	Set SS="%%s"
        Set SS=!SS:^|=" "!
	Set SS=!SS:*" "Name=!
	FOR /F "usebackq delims=}=" %%L IN ('!SS!') DO Set String=%%L}
	Echo !String!
)
При этом на экране будет @{......

Set SS=!SS:^|=" "! Подсмотрел у Iska,

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


Последний раз редактировалось megaloman, 15-04-2013 в 00:21.

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

Отправлено: 23:55, 14-04-2013 | #3


Ветеран


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

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


А если «delims» окажется не «}»?! Тогда уж лучше до пробела.

Отправлено: 00:25, 15-04-2013 | #4


Ветеран


Contributor


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

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


Iska, Сложно судить, что лучше, а если пробел внутри Name=@{.... ....}? Похоже, формат присваивания подразумевает парные скобки, но это тоже мои домыслы.

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


Отправлено: 00:30, 15-04-2013 | #5


Пользователь


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

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


megaloman, респект.
К решению близко, однако
1 вариант ругается когда ему дают раздел реестра Windows вместо файла
Код: Выделить весь код
reg query HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules /s
2 вариант выдал решение с хвостами вида " ""}
Iska, работает отлично! Скрипт достойный ветерана, спасибо в 2000-й раз .

Последний раз редактировалось Ксеноинженер, 15-04-2013 в 02:20.


Отправлено: 01:06, 15-04-2013 | #6


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=" %%s IN (`Type zzzzzzzz.txt`) DO (
	Set SS="%%s"
	Set SS=!SS:*^|Name=!
	FOR /F "usebackq delims=|=" %%L IN ('!SS!') DO Set String=%%L
	Echo !String!
)

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

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

Отправлено: 23:26, 17-04-2013 | #7


Пользователь


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

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


megaloman, так работает. Вижу, поменяли разделитель во 2-м цикле и убрали лишнюю строку в 1-м. В общем, получился альтернативный, короткий код.
Спасибо участникам конференции.

Последний раз редактировалось Ксеноинженер, 26-04-2013 в 17:05.


Отправлено: 02:59, 21-04-2013 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вытащить лицо из видео seluin Тест-форум 0 17-02-2013 23:51
CMD/BAT - вытащить из 3-x txt файлов строки в 4-й txt и отправить его в шару на сервер campbell Скриптовые языки администрирования Windows 1 10-11-2011 09:59
MySQL - Автозамена строки из другой строки - trigger? procedure ? BugZZ Программирование и базы данных 0 18-09-2009 09:51
Вытащить видео из AVI Karantin Видео и аудио: обработка и кодирование 10 05-05-2009 18:55
[решено] Как вырезать кусок звуковой дорожки из mkv-файла без потери качества? ALEXEY_DFD Видео и аудио: обработка и кодирование 4 22-10-2008 09:33




 
Переход