Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22

Замена текста в xml подобном файле через bat

15.03.2021, 18:06. Показов 4594. Ответов 22

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу помощи , никак не получается решить задачу: имеется XML подобный файл PanoV2.p2vr , который изначально нужно скопировать в папку с названием переменной и после в нем же нужно заменить словосочетание на эту же переменную . Трудность в том что BAT по видимому запинается об символы </> и я не знаю как это обойти . Использовать именно bat важно, так как помимо этого выполняется еще много других задач

</input>
<viewingparameter>
<pan/>
<tilt/>
<fov/>
<flyinstart/>
</viewingparameter>
<userdata>
<altitude>-10000</altitude>
<usealtitude>0</usealtitude>
<customnodeid>$(ib)</customnodeid>
<description/>
<title> Заменить это словосочетание </title>
</userdata>
<hotspots/>
<sounds/>
<animation>
<title>Animation01</title>
</animation>
</panorama>
</pano2vrconfig>


Пример моего кода:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
<PanoV2.p2vr>tmp (for /f "delims=" %%a in ('more') do @<nul set /p="%%a"|>nul findstr /r /c:"[Заменить это словосочетание]" && (
  set "vs=%%a"& call :ps
 ) || (
  echo:%%a
 )
)& >nul move tmp PanoV2.p2vr
pause& exit
 
:ps
 @set "vs=%vs:Заменить это словосочетание=Имя переменной%"
 @echo %vs%
exit /b
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2021, 18:06
Ответы с готовыми решениями:

Замена текста в bat через переменную
Здравствуйте, помогите переменными. Нужно при открытие bat сделать запрос пользователю (введи ip-адрес) ... он вводите его, дальше...

Замена текста в XML файле анимации Havok
Всем привет! Помогите с заменой текста в XML файле анимации хавока. В общем, текст такой: &lt;?xml version=&quot;1.0&quot;...

Копирование текста кириллицей , через скпипт в bat файле
Здравствуйте! Появилась надобность реализовать быстрое копирование текста. Так как люди мы продвинутые - шаблон в блокноте не для...

22
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 18:13
Ali1992, добрый вечер! Слишком громоздко. Если не смущает использование консольной допутилиты, то помогу реализовать в виде батника
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 18:23  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Ali1992, добрый вечер! Слишком громоздко. Если не смущает использование консольной допутилиты, то помогу реализовать в виде батника
Спасибо за ответ! Не смущает, я уже пробовал утилиту SED , но у меня не вышло , так как я видимо что то не правильно прописывал. А этот код я позаимствовал здесь на форуме и он замечательно работает, но если нет символов о которых я писал в теме
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 18:28
Ali1992, скорее всего. Именно ее я, кстати, и буду использовать. Нужна конкретика:
1) Какие постоянные характеристики есть у заменяемого словосочетания? (Номер строки, обрамление и т.п.)
2) Файл типовой или структура может хаотично изменяться?
3) В Вашем скрипте я не обнаружил копирования файла в папку с названием переменной. Кстати, что Вы имеете в виду под названием переменной? Ее значение или реально название переменной?
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 18:39  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Ali1992, скорее всего. Именно ее я, кстати, и буду использовать. Нужна конкретика:
1) Какие постоянные характеристики есть у заменяемого словосочетания? (Номер строки, обрамление и т.п.)
2) Файл типовой или структура может хаотично изменяться?
3) В Вашем скрипте я не обнаружил копирования файла в папку с названием переменной. Кстати, что Вы имеете в виду под названием переменной? Ее значение или реально название переменной?
Эта утилита мне подошла бы вполне
1) Номер строки в исходнике он 95, заменяемое словосочетание и обрамление всегда одно и тоже такое как в примере <title> Заменить это словосочетание </title>
2) Файл типовой всегда один и тот же (это шаблон) в нем только нужно будет менять словосочетание
3) Копирование и переменную я уже сам доделаю точнее они готовы. Суть такая что при копировании консоль спрашивает у меня название улицы, я вписываю ее вручную (это и есть переменная) . После создается папка с названием этой переменой, в нее копируется этот файл-шаблон, и в этом файле нужно заменить словосочетание на имя переменной (название улицы) . Вы можете мне просто хоть сделать замену A на B в структуре этого файла можно даже в формате .txt это не имеет значения. Сложность в том что у меня скрипт не работает из-за дополнительных символов
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 18:43
Номер строки в исходнике всегда 95, да?
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 18:44  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Номер строки в исходнике всегда 95, да?
да)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 19:43
Ali1992, странно тогда, что Вы сами не реализовали. Ещё раз:
1) Я правильно понял, что заменяемое словосочетание всегда одинаковое?
2) О каких допсимволах идёт речь? Пару примеров

Добавлено через 8 минут
Цитата Сообщение от Karen87 Посмотреть сообщение
1) Я правильно понял, что заменяемое словосочетание всегда одинаковое?
Если да, то напишите какое

Добавлено через 11 минут
В идеале файл бы приложили и я больше бы не доставал уточняющими вопросами

Добавлено через 9 минут
Ali1992, по идее должно быть так:
Windows Batch file
1
sed -i "95s/test/%word%/" PanoV2.p2vr
Соответственно, %word% - значение переменной
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 20:51  [ТС]
95
Цитата Сообщение от Karen87 Посмотреть сообщение
Ali1992, странно тогда, что Вы сами не реализовали. Ещё раз:
1) Я правильно понял, что заменяемое словосочетание всегда одинаковое?
2) О каких допсимволах идёт речь? Пару примеров

Добавлено через 8 минут

Если да, то напишите какое

Добавлено через 11 минут
В идеале файл бы приложили и я больше бы не доставал уточняющими вопросами

Добавлено через 9 минут
Ali1992, по идее должно быть так:
Windows Batch file
1
sed -i "95s/test/%word%/" PanoV2.p2vr
Соответственно, %word% - значение переменной
Извиняюсь за долгие ответы. Пролеблема в том что не всю строку надо заменить переменной а только словосочетание "Заменить это словосочетание" заключенное в <title> </title> в 95 строке. И не обязательно на переменную а можно и на "любое слово". То есть в конечном итоге файл должен остаться таким же а в 95 строке должно стать <title> Любое слово </title> ну или <title> %word% </title> из Вашего примера. Исходник прикрепляю, он открывается текстовиком спокойно PanoV2.zip
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 21:25
Ali1992, Вы так и не ответили что из себя представляет "заменить это словосочетание"? Это какая-то постоянная подстрока, которая во всех файлах одинаковая? Какой язык? Слово, которым заменится на кириллице или латинице? Если это постоянная подстрока, то напишите какая. Так же уточните, нужны ли концевые пробелы, которые есть в файле (пробелы в начале и в конце элемента "заменить это словосочетание")?
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 21:33  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Ali1992, Вы так и не ответили что из себя представляет "заменить это словосочетание"? Это какая-то постоянная подстрока, которая во всех файлах одинаковая? Какой язык? Слово, которым заменится на кириллице или латинице? Если это постоянная подстрока, то напишите какая. Так же уточните, нужны ли концевые пробелы, которые есть в файле (пробелы в начале и в конце элемента "заменить это словосочетание")?
Это та строка в коде (рыба) , которая будет заменяться , это словосочетание такое и будет всегда в исходном файле оно на кириллице, и будет заменяться словосочетанием на кириллице всегда на новое, которое я буду вписывать в консоль вручную например : "улица Петра Первого". Нет концевые пробелы не нужны, но если они будут то тоже ничего страшного
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 21:39
Рыба будет меняться или будет одинаковой во всех файлах?!
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 21:45  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Рыба будет меняться или будет одинаковой во всех файлах?!
будет одинаковой , ее можно хоть вообще удалить , мне важно чтобы в конце концов в это место (в 95 строке между тегами <title> </title> ) вставилось словосочетание ( а это название улицы на кириллице, которое я введу в консоли вручную без краевых пробелов)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 22:00
Лучший ответ Сообщение было отмечено Ali1992 как решение

Решение

Пробуйте пока такой вариант:
Windows Batch file
1
sed -i "95s/\(      <title>\)\([А-Яа-я0-9 ]\+\)\(<\/title>\)/\1%word%\3/" PanoV2.p2vr
Добавлено через 49 секунд
Примечание.
Код сохраняете в кодировке OEM-866

Добавлено через 50 секунд
И напишите какой именно будет рыба

Добавлено через 44 секунды
Может проще сразу ее в качестве заменяемой части ставить, а не шаблон регулярки
1
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 22:09  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Пробуйте пока такой вариант:
Windows Batch file
1
sed -i "95s/\(      <title>\)\([А-Яа-я0-9 ]\+\)\(<\/title>\)/\1%word%\3/" PanoV2.p2vr
Добавлено через 49 секунд
Примечание.
Код сохраняете в кодировке OEM-866

Добавлено через 50 секунд
И напишите какой именно будет рыба

Добавлено через 44 секунды
Может проще сразу ее в качестве заменяемой части ставить, а не шаблон регулярки
Спасибо большое! все работает! "Заменить это словосочетание" и было первоначальной рыбой, так как я вручную ее заменял, но я так понял для скрипта это трудновато, я заменил ее на "1" и Ваш последний код начал работать. Спасибо еще раз огромное!
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 22:15
Ali1992, да не за что, а с первоначальной рыбой не работает разве?
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
15.03.2021, 22:23  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Ali1992, да не за что, а с первоначальной рыбой не работает разве?
да загвоздка в кодировке, даже если я выбираю как Вы посоветовали в notepad++ после сохранения она видимо сбивается и скрипт не хочет искать по шаблону. А с цифрами проще, мне главное что когда пишу в консоли кириллицей название все хорошо сохраняется. Просто мне удобней в utf8 работать так как разные компьютеры постоянно. Спасибо большое еще раз!
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
15.03.2021, 22:33
Да не за что
0
0 / 0 / 0
Регистрация: 18.10.2016
Сообщений: 22
16.03.2021, 12:50  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Да не за что
Столкнулся с проблемой, что исходный файл после утилиты SED меняет свою кодировку с UTF8 на windows кодировку, что в итоге не дает отобразить в программе конечное словосочетание на кирилице. Можно ли как то заставить SED после замены сохранять файл именно в кодировке UTF-8?

Добавлено через 57 минут
Цитата Сообщение от Ali1992 Посмотреть сообщение
Столкнулся с проблемой, что исходный файл после утилиты SED меняет свою кодировку с UTF8 на windows кодировку, что в итоге не дает отобразить в программе конечное словосочетание на кирилице. Можно ли как то заставить SED после замены сохранять файл именно в кодировке UTF-8?
Решил пока проблему изменением настройки системы на UTF-8, чтобы как я понимаю CMD работала в ней
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
17.03.2021, 04:56
Лучший ответ Сообщение было отмечено Ali1992 как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
set "f=C:\Users\...\Desktop\PanoV2\PanoV2.p2vr"
:: Вывод в файл
for /f "delims=" %%a in ('xml sel -t -v "//title[1]" -n "%f%"') do <nul set /p="%%a">"file.txt"
:: Замена на свою информацию
echo Введите информацию для замены& set /p z=
xml ed -L -u "//title[1]" -v "%z%" "%f%"
pause
xml.7z
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2021, 04:56
Помогаю со студенческими работами здесь

Замена элементов в XML файле через SetElementValue
Здравствуйте, создаю хмл файл, где планирую хранить данные о курсе валют &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; ...

Замена текста в существующем документе Word через Область сопоставления XML
Друзья! Никак не могу разобраться с задачкой. Есть документ с XML-сопоставлением. В нем очень много повторяющихся слов, которые можно...

Выполнение условия в bat файле по наличию текста в определённом файле
Задача: найти опеределённую строчку текста в файле и если она совпадает с искомой, то выполнить goto metka в bat файле, иначе goto metka2 ...

Поиск в текстовом файле и замена и в файле xml
Имеется текстовый файл следующего типа FB-000002523202323...

Замена слова в файле используя *.bat
Всем привет! Появилась задача перенести 1с базу на другой сервер. Имя базы остается прежним, а имя сервера как раз меняется. Бегать по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
И ясному Солнцу
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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru