|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
|
Замена части строки XML-файла20.02.2019, 16:26. Показов 5141. Ответов 38
Метки нет (Все метки)
Здравствуйте.
Помогите, пожалуйста, заменить часть строки xml файла, с помощью bat файла. вот образец: <?xml version="1.0" encoding="UTF-8"?><external-systems xmlns="ееее"> <service-provider id="60385241"> <processing-provider> <service-type/> </processing-provider> <property value="5" key="exciseValidationServerTimeout" id="228959817"/> <property value="30" key="egais_timeout" id="177988722"/> <property value="0" key="depthInDays" id="228959814"/> </service-provider> <service-provider name="Set:Prisma" settingsOnShop="false" id="426843810"> <processing-provider localized-name="Set:Prisma" name="prismabridge"> <service-type localized-name="Призма" name="prismabridge"/> </processing-provider> <property value="5.5.5" key="prisma_url" id="180200581"/> </service-provider> </external-systems> эти символы нужно заменить на значение переменной.
0
|
|
| 20.02.2019, 16:26 | |
|
Ответы с готовыми решениями:
38
Замена части строки XML-файла Вывод заданной части определённой строки каждого XML-файла в указанной папке
|
|
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||
| 20.02.2019, 16:44 | |||||||
1
|
|||||||
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
||||||
| 20.02.2019, 16:44 | ||||||
|
Как бы вот.Заменит все 5.5.5 на 0.0.0 Только вопрос.Они всегда такие или могут быть и другие циферки?А если в коде будут еще 5.5.5, то все надо менять или только те ,которые обозначены красным?
0
|
||||||
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
|
| 20.02.2019, 17:59 [ТС] | |
|
ZoOoO,
странно, при первом запуске работало, а теперь пишет '<?xml' is not recognized as an internal or external command, operable program or batch file. и новый файл 002 пустой. Добавлено через 14 минут ZoOoO, с первой проблемой разобрался. спасибо. а вот еще что, как вместо set "c=0.0.0" указать составную переменную? Например в цикле FOR %%P IN (1 2) DO ( set "c=0.%%P.0" что бы было 0.1.0 а потом 0.2.0 Добавлено через 6 минут ZoOoO, спасибо! а вот еще что, пара дополнительных моментов: 1. как вместо set "c=0.0.0" указать составную переменную? Например в цикле FOR %%P IN (1 2) DO (set "c=0.%%P.0" что бы было 0.1.0 а потом 0.2.0 как сослаться на значение цикла? 2. Как этим же значением заменить значение 30? value=30 из 7 строки
0
|
|
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
|||||||
| 20.02.2019, 18:13 | |||||||
0
|
|||||||
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|
| 20.02.2019, 18:48 | |
|
iRas, у вас файл в utf-8, но содержит кириллицу, при замене чего-то внутри с помощью cmd, придется переносить все в новый файл с изменениями и оттуда обратно переписывать в старый (так уж работает этот cmd - увы) и неизбежно получите проблемы с кодировкой или в виде кракозябров или вообще вылета.
Поэтому, если хотите правильно надежно и лаконично, прислушайтесь к KDE777.
0
|
|
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
|
| 21.02.2019, 10:22 [ТС] | |
|
ZoOoO,
да, второе значение для изменения - индивидуальное в составе файла
0
|
|
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
|
| 21.02.2019, 10:56 | |
|
Ну,вот,я код на написал,только как это соединить,я неипонимаю.Я не понимаю,что надо.
0
|
|
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
|
| 21.02.2019, 11:02 [ТС] | |
|
alpap, ZoOoO, KDE777,
я сформулирую задачу целиком. есть циклы: FOR %%I IN (100 101 102) DO ( FOR %%Q IN (1 2 3 4 5 6 7 8 9 10 DO ( FOR %%P IN (1 2 3 4 5 6 7 8) DO ( значение переменной должно быть %dest% = 10.%%I.%%Q.37 так вот, эту dest нужно подставить в xml в последнем цикле. в XML есть блоки <service-provider name="1"> <processing-provider localized-name="1" name="1"> <service-type localized-name="1" name="1"/> </processing-provider> <property value="http://10.101.50.37:8080/xml" key="egais_url" id="177982936"/> <property value="http://10.101.50.37:9000" key="exciseValidationServerAddress" id="229240738"/> <property value="0" key="egaisExciseCheckValidationTimeout" id="229240737"/> </service-provider> <service-provider name="Set:Prisma" settingsOnShop="false" id="426843810"> <processing-provider localized-name="Set:Prisma" name="prismabridge"> <service-type localized-name="Призма" name="prismabridge"/> </processing-provider> <property value="10.101.50.30" key="prisma_url" id="180200581"/> </service-provider>
0
|
|
|
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
||
| 21.02.2019, 11:25 | ||
|
Я правильно понял: найти все xml-элементы property, у которых значение value содержит IP адрес (любой?) и этот IP нужно заменить на новый? Т.е. все найденные IP в property value нужно заменить на один новый IP. Или нужно что-то другое? xml-документ - это не просто текст, а формализованная структура, в которой можно манипулировать только нужными элементами/значениями.
0
|
||
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
|||
| 21.02.2019, 11:44 [ТС] | |||
|
KDE777,
мне нужно изменить базовый шаблонный файл, заменив 3 адреса на значения из циклов. и отправить его на хост операции выполняются с хостами именно по такой переменной dest оправка производится к примеру так: но это за рамками задачи. это рабочий инструмент отправка файлов на хосты. FOR /F "tokens=*" %%J IN ('ECHO y ^| pscp.exe -pw "324012" -r -scp -unsafe -P 22 tc@10.%%I.%%Q.2%%P:%send_from% scanlog10.%%I.%%Q.2%%P ^|^|ECHO. - ERROR') DO (ECHO %%I .. tc@10.%%I.%%Q.2%%P: .. %%J>>Logs/%logfile%) есть шаблонный файл. в нем указан 1 адрес в 3-х местах. 10.101.50.37. его нужно заменить и отправить результат на хост. предыдущий вариант решения подошел для замены одного значения. за что я очень благодарен автору
0
|
|||
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
|||
| 21.02.2019, 11:53 | |||
|
Есть куча XML файлов в которых есть одинаковые значения у строк property value и мы эти значения знаем. Нам надо эти значения заменить своими,которые получаются с помощью циклов
А как получается вот это значение то есть нам нужны только эти значения 100,101,102?Просто они вставляются каждый раз разные и так по кругу,пока не закончатся XML файлы?
0
|
|||
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
||
| 21.02.2019, 12:02 [ТС] | ||
|
ZoOoO,
FOR %%I IN (100 101 102) DO ( FOR %%Q IN (1 2 3 4 5 6 7 8 9 10 DO ( FOR %%P IN (1 2 3 4 5 6 7 8) DO ( в последнем цикле %%P заменить шаблонное значение из файла на значение переменной %dest% = 10.%%I.%%Q.37 Добавлено через 4 минуты пока что у меня @echo off Setlocal EnableDelayedExpansion FOR %%I IN (101) DO ( FOR %%Q IN (50) DO ( set "c=10.%%I.%%Q.37" FOR /f "delims=" %%a in (002.xml) do ( set a=%%a set b=!a:0.0.0=%c%! echo !b!>> 1.xml у меня в 1.xml пусто значение подставляется . видимо это некорректно set "c=10.%%I.%%Q.37"
0
|
||
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
|
| 21.02.2019, 12:03 | |
|
ну,я понял,что надо 10.100.50.37 заменить на другие числа.С циклами только не понятно.Меня смущает 100,101,102.Это как надо что бы цикл выглядел или все таки мы имеем число от нуля до 255?И не понятно,что должен делать цикл последний.
Добавлено через 1 минуту Для чего нам цикл нужен?ЧТо бы значения во всех XML файлах было разное?
0
|
|
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
||
| 21.02.2019, 12:07 [ТС] | ||
|
ZoOoO,
с вашим предыдущим решением, с заменой 1 места, у меня выходит так, я убрал многие значения циклов для тестирования и пилотного применения на конкретном хосту пока что у меня @echo off Setlocal EnableDelayedExpansion FOR %%I IN (101) DO ( FOR %%Q IN (50) DO ( set "c=10.%%I.%%Q.37" FOR /f "delims=" %%a in (002.xml) do ( set a=%%a set b=!a:0.0.0=%c%! echo !b!>> 1.xml у меня в 1.xml пусто значение подставляется . видимо это некорректно set "c=10.%%I.%%Q.37"
0
|
||
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
|
| 21.02.2019, 12:11 | |
|
Я понять не могу.Значения должны менятся в пределах этих адресов 10.100-102.1-10.37?
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
||
| 21.02.2019, 12:19 | ||
|
iRas, Давайте код целиком и напишите - есть так, а надо поменять что-то чтобы стало так, без вашего вмешательства в код и примеров как это можно сделать.
У вас ОЧЕНЬ много непонятного, например этой строкой Надо понимать всю задачу целиком, возможно переписать весь код целиком, поэтому вас и просят объяснить все от начала до конца. а не приводить какие-то кусочки кода и ваши возможные потуги их залатать.
0
|
||
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 20
|
||
| 21.02.2019, 12:27 [ТС] | ||
|
вот скрипт по отправке файла. @echo off cd C:\tmp\mover\dest\ Setlocal EnableDelayedExpansion SET logfile=transfer-%DATE:~0,2%_%DATE:~3,2%_%DATE:~6,4% IF "%TIME:~0,1%"==" " (SET logfile=%logfile%-0%TIME:~1,1%) ELSE (SET logfile=%logfile%-%TIME:~0,2%) SET logfile=%logfile%_%TIME:~3,2%_%TIME:~6,2 %.log FOR %%I IN (100 101 102) DO ( FOR %%Q IN (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99) DO ( FOR %%P IN (1 2 3 4 5 6 7 8) DO ( FOR /F "tokens=*" %%J IN ('ECHO y ^| pscp.exe -pw "111" -r -scp -unsafe -P 22 1.xml tc@10.%%I.%%Q.2%%P:/home/tc/storage/config ^|^|ECHO. - ERROR') DO (ECHO %%I .. tc@10.%%I.%%Q.2%%P: .. %%J>>Logs/%logfile%) ) ) ) ) pause перед отправкой, мне нужно в 1.xml указать в 3 местах значение 10.%%I.%%Q.37
0
|
||
|
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
|
|
| 21.02.2019, 12:38 | |
|
сча
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|||||||||||||
| 21.02.2019, 12:43 | |||||||||||||
|
1.xml, если содержит кириллицу (в вашем примере содержит), а кодировку имеет utf-8 и однозначно поломается при перезаписи, также поломается форматирование файла xml. Не спрашиваю согласны вы с этим или нет, а утверждаю что делать это (изменение данных) надо или отдельной утилитой или powershell или vbs/js, вы с помощью cmd все угробите, в штатном блокноте вы даже в кодировке 866 не сможете его сохранить, а на той стороне еще перекодировать надо? Надо брать каждую строку, находить нужную, делать в ней замену (или переписывать на новую) и эту каждую строку записывать в новый файл 1.xml, а старый удалять или во временный файл и удалять а временный менять на 1.xml, но неважно, кодировка и форматирование точно пострадают, а это не просто слова - пострадают данные, можно допустить ошибки, у cmd сложности с записью спецсимволов коих в xml хватает или что еще будет на момент когда все работало. Добавлено через 1 минуту а что вы выводите строкой?
0
|
|||||||||||||
| 21.02.2019, 12:43 | |
|
Помогаю со студенческими работами здесь
20
Замена части строки в текстовом файле
Замена строки (целиком), найденная по части строки
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|