Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как получить значение искомой подстроки в строке? (http://forum.oszone.net/showthread.php?t=171768)

Loki3D 31-03-2010 11:20 1381384

Как получить значение искомой подстроки в строке?
 
Есть XML файл, состоящий из одной Длинной строчки
нужно найти в этой строчке упоминание переменной xxx и получить ее значение.
Например.
кусок строки XML: ... aaa="1" bbb=2 ccc="acb" ... xxx="4" ....

вот как то нужно Чему равно xxx

Busla 31-03-2010 15:45 1381598

А wsh совсем не катит?

Loki3D 31-03-2010 15:50 1381603

Busla, Катит. Программист уже написал VBSCript.
Хотелось узнать авторитетное мнение, можно ли такое на CMD, а то у самого не получилось.

zonderz 31-03-2010 16:45 1381656

Loki3D

findstr

Loki3D 31-03-2010 16:50 1381665

zonderz, и как это поможет?

zonderz 31-03-2010 17:01 1381672

Loki3D

сорри, не заметил что у вас текст в одной строке...

тогда
http://www.dostips.com/DtTipsStringManipulation.php
http://www.google.ru/search?hl=ru&ne... oq=&gs_rfai=

Loki3D 31-03-2010 17:48 1381715

zonderz, спасибо за первую ссылку, но к сожалению при попытке использовать пример
set str=the cat in the hat
echo.%str%
set str=%str:the =%
echo.%str%
получаю ошибку что слишком большая строка, в SET
не говоря уже о том, что пока не представляю, как можно передать строчку из файла в переменную.

zonderz 31-03-2010 23:30 1382008

Loki3D

можно делать - точно говорю, не могу сейчас наптсать - давно было - еще в 95том
штудируйте по дос команды

Busla 01-04-2010 17:42 1382633

Если бы была уверенность, что xml записан именно так, я бы разбил вход на подстроки используя в качестве разделителя пробел, получились бы подстроки с присвоениями и ненужный мусор. Эти подстроки разбиваем через знак равенства и получаем пары атрибут и значение. Но в общем случае и вокруг знака равно могут быть пробелы, и после значения может не только пробел.

Loki3D 01-04-2010 17:49 1382638

Busla, как бы ты разбил?. через FOR ?
там же получается Множество значений, раделенных пробелами. и не всегда можно угадать на какую из букв переменной %%а..%%я будет приходится искомая пара xxx=??. Строка то одна.

NiOl 01-04-2010 21:09 1382752

Сложный случай. Во-первых у cmd ограничение длины строки в 4095 по-дефолту (кажется), расширяемое до 16383 (кажется). если Ваш однострочный XML больше, вернее нужная Вам переменная находится дальше границы - то возможно только с привлечением софтин, не входищих в Виндовс по-дефолту.

Далее, сильное влияние на код окажет начало XML-файла, которое просьба здесь процетировать. (не значит, что дословно, все переменные и их значения можете заменить на любые беспалевные для Вас, важна сама структура до начала списка переменных, ну включая первые несколько переменных, чтобы подогнать без ошибок...
Но вообще возможно таким образом (ставка сделана на то, что знак "=" не может оказаться в кавычках, а также на то, что значения переменных не могут содержать пробелов, а разрыв между переменными сделан исключительно на пробелах. *видите сколько "условностей"? ;) )
Код:

@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set File="SOURCE.XML"
set Var=xxx

for /f "usebackq tokens=* delims=" %%L in (%File%) do (
set Line=%%L
:XML
for /f "usebackq tokens=1,* delims= " %%B in ('!Line!') do (
for /f "usebackq tokens=1,* delims==" %%V in ('%%B') do if "%%V"=="%Var%" set Value=%%~W
set Line=%%C
)
if not "!Line!"=="" goto XML
)

if not "%Value%"=="" echo %Value%

зы: Если на выходе нужно сохранить двойные кавычки - в фрагменте set Value=%%~W убирите тильду.

in1975@vk 24-02-2018 08:37 2799874

а можно из этого достать только url (все в строчке)?

Код:

<?xml version='1.0' encoding='UTF-8'?>
<titlepatch status="alive" titleid="BLUS31181"><tag name="BLUS31181_T38" popup="true" signoff="true"><package version="01.13" size="9028848240" sha1sum="1c2d1b7c90fdf2de2902d215cad360fd8702ef3a" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0013-A0113-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.14" size="31146880" sha1sum="5f6f7b4191310888daac9ac9a471ee31e012dfd9" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0014-A0114-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.15" size="31376272" sha1sum="e9d1a0e1aad21357e734c8c04eddfd0c2a33495b" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0015-A0115-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.16" size="387354160" sha1sum="ad606edb241465eb66878e4a68635d366124994d" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0016-A0116-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.17" size="49766464" sha1sum="ee40beab87c57030d54049d6a65560ac50eec7d6" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0017-A0117-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.18" size="352585248" sha1sum="3c12317cbf2d416bf529b0cc582df5c332722045" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0018-A0118-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.19" size="100275776" sha1sum="be08f4328f8658396396a86aa40284fc2c2a3931" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0019-A0119-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.20" size="1122184704" sha1sum="5410b588380f9180739116d72a945b4b8b7a77c3" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0020-A0120-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.21" size="33303440" sha1sum="3144fb7d932ce00ebaa1463532eb98c84d944eaf" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0021-A0121-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.22" size="220153536" sha1sum="f774924769df05e1c61790a98d227241839b5e41" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0022-A0122-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.23" size="55506352" sha1sum="cf5fa69c7ac86465a0f718c9f7d91ee4017be6aa" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0023-A0123-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.24" size="31589024" sha1sum="d70b4eb6596a40e7b92f433f6c6badfb0e43f37f" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0024-A0124-V0100-PE.pkg" ps3_system_ver="04.5000"><paramsfo><TITLE>Destiny</TITLE></paramsfo></package></tag></titlepatch>

Подскажите батник пожалуйста


Время: 17:09.

Время: 17:09.
© OSzone.net 2001-