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

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

Ответить
Настройки темы
CMD/BAT - [решено] Перенести в XML имя компьютера заменив часть текст.

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


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

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


Добрый вечер!
Покопался на форуме несколько часов, перепробовал найденные примеры, но не смог сделать сам, помогите новичку.
Необходимо создать батник который в файле XML заменить в строке <Server>USER-PC/3050</Server> значение "USER-PC" на реальное имя компьютера.
XML выглядит так:
<?xml version="1.0" encoding="windows-1251"?>
<Settings>
<DB>
<Type>Firebird</Type>
<Server>USER-PC/3050</Server>
<Database>C:\Taxcom\Docliner Single\DB\Docliner.fdb</Database>
<IntegratedSecurity>False</IntegratedSecurity>
<Login>Login</Login>
<Password>Password</Password>
<DatabaseMK>C:\Taxcom\Docliner Single\DB\Docliner_MK.fdb</DatabaseMK>
<Filestream>C:\Taxcom\Docliner Single\DB\Filestream</Filestream>
<CountConnection>5</CountConnection>
</DB>
</Settings>

Отправлено: 23:59, 18-01-2017

 

Ветеран


Contributor


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

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


Если в строке <Server>USER-PC/3050</Server> больше ничего нет, то вот решение
Код: Выделить весь код
@echo off
Set "FileIn=Z:\Box_In\Ку ку.xml"
Del "%FileIn%.tmp" 2>nul

Set "RepIn=<Server>USER-PC/3050</Server>"
Set "RepOut= ^<Server^>%ComputerName%/3050^</Server^>

SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=[]" %%i IN (`Find /N "%RepIn%" "%FileIn%"`) DO Set /A "N=%%i" 2>nul
Set /A ii=0
FOR /F "usebackq delims=" %%s IN (`more "%FileIn%"`) DO (
	Set /A ii+=1
	If !ii!==%N% (Echo %RepOut%>>"%FileIn%.tmp") Else (Echo %%s>>"%FileIn%.tmp")  
)
Move /Y "%FileIn%.tmp" "%FileIn%" >nul
alpap, у меня почему-то ваш батник отрабатывает неправильно
Вот исходный файл(Z:\Box_In\Ку ку.xml)
Код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?>
 <Settings>
 <DB>
 <Type>Firebird</Type>
 <Server>USER-PC/3050</Server>
 <Database>C:\Taxcom\Docliner Single\DB\Docliner.fdb</Database>
 <IntegratedSecurity>False</IntegratedSecurity>
 <Login>Login</Login>
 <Password>Password</Password>
 <DatabaseMK>C:\Taxcom\Docliner Single\DB\Docliner_MK.fdb</DatabaseMK>
 <Filestream>C:\Taxcom\Docliner Single\DB\Filestream</Filestream>
 <CountConnection>5</CountConnection>
 </DB>
 </Settings>
Вот Ваш батник с моим путём
Код: Выделить весь код
@echo off

set "f=Z:\Box_In\Ку ку.xml"
set "tg=<Server>"
set "sz=%Computername%"
<"%f%">$ (for /f "delims=" %%a in ('more') do @(
  echo "%%~a"|>nul find "%tg%" && (
   for /f "tokens=1,3 delims=><" %%b in ("%%~a") do @echo:^<%%b^>%sz%^<%%c^>
  ) || (
   echo %%a
  )
 )
)& >nul move $ "%f%"
exit
Вот результат его работы
Код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?>
 <Settings>
 <DB>
 <Type>Firebird</Type>
< >MEGALOMAN<USER-PC/3050>
 <Database>C:\Taxcom\Docliner Single\DB\Docliner.fdb</Database>
 <IntegratedSecurity>False</IntegratedSecurity>
 <Login>Login</Login>
 <Password>Password</Password>
 <DatabaseMK>C:\Taxcom\Docliner Single\DB\Docliner_MK.fdb</DatabaseMK>
 <Filestream>C:\Taxcom\Docliner Single\DB\Filestream</Filestream>
 <CountConnection>5</CountConnection>
 </DB>
 </Settings>

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


Последний раз редактировалось megaloman, 24-01-2017 в 21:25.


Отправлено: 19:55, 24-01-2017 | #11



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

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


Ветеран


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

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


megaloman,
Исходный: C:\Box_In\Ку ку.xml (кодировка 866)
Код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?>
<Settings>
<DB>
<Type>Firebird</Type>
<Server>USER-PC/3050</Server>
<Database>C:\Taxcom\Docliner Single\DB\Docliner.fdb</Database>
<IntegratedSecurity>False</IntegratedSecurity>
<Login>Login</Login>
<Password>Password</Password>
<DatabaseMK>C:\Taxcom\Docliner Single\DB\Docliner_MK.fdb</DatabaseMK>
<Filestream>C:\Taxcom\Docliner Single\DB\Filestream</Filestream>
<CountConnection>5</CountConnection>
</DB>
</Settings>
Собственно код: (кодировка 866)
Код: Выделить весь код
@echo off
set "f=C:\Box_In\Ку ку.xml"
set "tg=<Server>"
set "sz=%Computername%"
<"%f%">$ (for /f "delims=" %%a in ('more') do @(
  echo "%%~a"|>nul find "%tg%" && (
   for /f "tokens=1,3 delims=><" %%b in ("%%~a") do @echo:^<%%b^>%sz%^<%%c^>
  ) || (
   echo %%a
  )
 )
)& >nul move $ "new.xml"
exit
Вывод: (кодировка 866)
Код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?>
<Settings>
<DB>
<Type>Firebird</Type>
<Server>AIVA</Server>
<Database>C:\Taxcom\Docliner Single\DB\Docliner.fdb</Database>
<IntegratedSecurity>False</IntegratedSecurity>
<Login>Login</Login>
<Password>Password</Password>
<DatabaseMK>C:\Taxcom\Docliner Single\DB\Docliner_MK.fdb</DatabaseMK>
<Filestream>C:\Taxcom\Docliner Single\DB\Filestream</Filestream>
<CountConnection>5</CountConnection>
</DB>
</Settings>
Я все проверяю.
Единственно, если у ТС что-то не так выглядит в исходном или оказывает влияние кодировка, то все может быть и не для cmd это дело по большому счету, если будет (что очень реально) кодировка utf-8 и кириллица для полного счастья - cmd точно отдыхает.

Отправлено: 02:02, 25-01-2017 | #12


Ветеран


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

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


Цитата alpap:
Исходный: C:\Box_In\Ку ку.xml (кодировка 866) »
А как же:
Цитата alpap:
Код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?>
»
В данном случае, конечно, без разницы, но тем не менее.

Цитата alpap:
если будет (что очень реально) кодировка utf-8 »
Не будет. Кодировка указана в xml.

Отправлено: 05:07, 25-01-2017 | #13


Ветеран


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

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


Цитата Iska:
В данном случае, конечно, без разницы, но тем не менее. »
но тем не менее работает правильно, ни пробелы в пути ни кириллица (если код в 866) не мешают, даже проверил на 1251 для пущей уверенности


megaloman,
все, понял в чем причина.
Скопировал именно Ваш вариант содержимого xml и увидел что после строки
<?xml version="1.0" encoding="windows-1251"?>
все последующие строки идут с пробелом в начале строки (случайность? или так положено оформлять xml?)
это ломает выходную картину.

Отправлено: 13:14, 25-01-2017 | #14


Ветеран


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

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


Для такого варианта написания содержимого код будет таким:
Код: Выделить весь код
@echo off
set "f=Z:\Box_In\Ку ку.xml"
set "tg=<Server>"
set "sz=%Computername%"
<"%f%">$ (for /f "delims=" %%a in ('more') do @(
  echo "%%~a"|>nul find "%tg%" && (
   for /f "tokens=2,4 delims=><" %%b in ("%%~a") do @echo: ^<%%b^>%sz%^<%%c^>
  ) || (
   echo %%a
  )
 )
)& >nul move $ "%f%"
exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 25-01-2017 | #15


Ветеран


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

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


Цитата alpap:
и увидел что после строки
<?xml version="1.0" encoding="windows-1251"?>
все последующие строки идут с пробелом в начале строки (случайность? или так положено оформлять xml?) »
Для xml пробельные символы (пробелы, табуляция и т.п.) вообще не имеют значения (не будучи оформлены специальным образом). То есть, xml может и вовсе быть записанным в одну-единственную строку — и при этом оставаться валидным.

Отправлено: 13:56, 25-01-2017 | #16


Ветеран


Contributor


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

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


alpap, Я не знаю, что бы хотел iluha_nam, но я понял задачу, что надо получить строку типа
<Server>TRALALA/3050</Server>

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


Отправлено: 14:08, 25-01-2017 | #17


Ветеран


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

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


megaloman, я тоже понял именно так. То есть — заменить часть содержимого узла Server.

Отправлено: 14:11, 25-01-2017 | #18



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
V. 2010 - Как перенести часть базы exchange на другой сервер Epic555 Microsoft Exchange Server 1 11-04-2014 10:55
Apple планирует перенести часть производства Mac в США OSZone News Новости информационных технологий 0 06-12-2012 22:30
Можно ли перенести программу с одного компьютера на другой? Arassir Хочу все знать 6 08-07-2011 17:42
HDD - HELP! Можно ли перенести часть свободного места диска "C" в неразмеченную область? ox1dex Накопители (SSD, HDD, USB Flash) 8 23-07-2008 20:53
xml и русский текст L71 Вебмастеру 13 08-11-2005 10:22




 
Переход