|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перенести в XML имя компьютера заменив часть текст. |
|
CMD/BAT - [решено] Перенести в XML имя компьютера заменив часть текст.
|
Новый участник Сообщения: 6 |
Добрый вечер!
Покопался на форуме несколько часов, перепробовал найденные примеры, но не смог сделать сам, помогите новичку. Необходимо создать батник который в файле 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 |
Ветеран Сообщения: 2733
|
Профиль | Отправить 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
|
Профиль | Отправить 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> @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 <?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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 05:07, 25-01-2017 | #13 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Iska:
megaloman, все, понял в чем причина. Скопировал именно Ваш вариант содержимого xml и увидел что после строки <?xml version="1.0" encoding="windows-1251"?> все последующие строки идут с пробелом в начале строки (случайность? или так положено оформлять xml?) это ломает выходную картину. |
|
Отправлено: 13:14, 25-01-2017 | #14 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Для такого варианта написания содержимого код будет таким:
|
Отправлено: 13:29, 25-01-2017 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата alpap:
|
|
Отправлено: 13:56, 25-01-2017 | #16 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать alpap, Я не знаю, что бы хотел iluha_nam, но я понял задачу, что надо получить строку типа
<Server>TRALALA/3050</Server> |
------- Отправлено: 14:08, 25-01-2017 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, я тоже понял именно так. То есть — заменить часть содержимого узла Server.
|
Отправлено: 14:11, 25-01-2017 | #18 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|