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

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

Ответить
Настройки темы
CMD/BAT - [решено] работа с XML файлом

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


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

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


Есть xml файл, следующего содержания:
Код: Выделить весь код
<?xml version="1.0" encoding="utf-8"?>
<process><datetime>2010-03-27T12:01:35+02:00</datetime><code>500</code></process>
Естественно дата меняется регулярно в зависимости от времени внесения изменений в файл.
Цифры заключенные в теге code(в данном случае 500), так же варьируются(например 200, 250, 400, 500, 2000 и т.д.)
Задача:
Заменить из командной строки, цифры заключённые в теге code на 100
Если указывать явно, что на что менять то проблем нет. Но я не всегда заранее знаю, что в этом файле. А вот так что-бы заменить
Код: Выделить весь код
<code>???</code>
- хоть убей ничего не выходит.
Не помог ни sed for Windows(хотя с ним я возможно не разобрался как следует, но уже сил не хватило моральных) ни CHGSTR.EXE(последний позволяет задать параметры поиска только для всей строки. а менять дату в этой строке нельзя.)
Спасибо.

Отправлено: 03:48, 28-03-2010

 

Аватара для El Sanchez

Ветеран


Contributor


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

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


taravasya,

Код: Выделить весь код
@echo off
setlocal EnableDelayedExpansion

set "Source=C:\Temp\Test.xml"
set "Output=C:\Temp\Test_output.xml"
set n=0

for /f "tokens=*" %%a in ('type %Source%') do (
	set /a n+=1
	set "str=%%a"
	if !n! NEQ 1 (
		for /f "tokens=2-6* delims==>" %%b in ('set str') do (
			echo %%b^>%%c^>%%d^>%%e^>100^</code^>%%g>>%Output%
		)
	) else (
		for /f "tokens=1* delims==" %%b in ('set str') do (
			echo %%c>>%Output%
		)
	)
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:56, 28-03-2010 | #2



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

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


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


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

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


Ох..... Спасибо. Уже не в первый раз выручаете. Сам бы, ни за что не составил бы такой скрипт....
Теперь остаётся прочитать Test_output.xml, и заменить его содержимым, содержимое Test.xml. С этим я думаю справлюсь. Ещё раз спасибо.

Отправлено: 13:44, 28-03-2010 | #3


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


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

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


Приветствую!
У меня схожая задача, поэтому надеюсь добрые люди здесь помогут.
Дано: XML файл. В нём есть строка <UserId>OFFICE\Admin</UserId>
и нужно написать bat файл для автоматического редактирования OFFICE\Admin на имя ПК и имя текущего пользователя.
Какие в таком случае нужно использовать переменные?
Я второй день постигаю искусство написания скриптов. Вчера написал свой первый скрипт по пересозданию задания планировщика задач Windows.
Прошу помощи.

Отправлено: 16:41, 19-05-2017 | #4


Ветеран


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

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


Nike-jersey,
если ничего "экзотического" в строках нет, будет работать и это:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

set "f=file.xml" &: Файл в котором будет замена
set "sf=UserId" &: Поиск строки "<UserId>OFFICE\Admin</UserId>"
set "sz=%Computername%\%Username%" &: Здесь указать что вместо "OFFICE\Admin"

<"%f%">$ (for /f "delims=" %%A in ('more') do @echo "%%~A"|>nul find "%sf%" && (
  for /f "tokens=1-3 delims=<>" %%a in ("%%~A") do @set "z=%%b"& echo:^<%%a^>!z:%%b^=%sz%!^<%%c^>
 ) || (
  echo %%A
 )
)& >nul move $ "%f%"
exit

Отправлено: 17:42, 19-05-2017 | #5


Забанен


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

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


Самый простой способ разбора xml из командной строки - использовать xmlstarlet:
Код: Выделить весь код
xml -L -u "/process/code" -v 1000 logged.xml
Тем более, что xmlstarlet умеет принимать данный из stdin.

Отправлено: 22:40, 19-05-2017 | #6


Ветеран


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

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


greg zakharov, речь про это: XMLStarlet - Wikipedia? Я не работал. Как он Вам показался?

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


Забанен


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

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


Iska, речь именно о нем. Кто бы что о нем не говорил, вещь очень хорошая. Если в трех словах - sed для xml. И этим, в общем-то, все сказано. Плохо, правда, что под Windows из исходников собирается с полпинка.

Отправлено: 17:03, 20-05-2017 | #8


Ветеран


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

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


greg zakharov, спасибо, ясно.

Отправлено: 17:40, 20-05-2017 | #9


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


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

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


Изображения
Тип файла: png Screenshot_20.png
(3.4 Kb, 8 просмотров)
Тип файла: png Screenshot_1.png
(4.7 Kb, 7 просмотров)

Цитата alpap:
@echo off
setlocal enabledelayedexpansion
set "f=file.xml" &: Файл в котором будет замена
set "sf=UserId" &: Поиск строки "<UserId>OFFICE\Admin</UserId>"
set "sz=%Computername%\%Username%" &: Здесь указать что вместо "OFFICE\Admin"
<"%f%">$ (for /f "delims=" %%A in ('more') do @echo "%%~A"|>nul find "%sf%" && (
for /f "tokens=1-3 delims=<>" %%a in ("%%~A") do @set "z=%%b"& echo:^<%%a^>!z:%%b^=%sz%!^<%%c^>
) || (
echo %%A
)
)& >nul move $ "%f%"
exit »
Было
Стало
Я попытался разобраться, что-то сложно.

Отправлено: 15:17, 25-05-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как заставить броузер считать результат работы скрипта файлом XML ? Vlad Drakula Вебмастеру 4 17-07-2013 21:04
[решено] С этим XML-файлом не связана ни одна таблица стилей. Ниже показано дерево элементов. Artem-Samsung Вебмастеру 9 14-03-2012 21:52
[решено] Работа с XML snoitaleR AutoIt 7 17-02-2009 07:57
Разное - Работа с файлом hhh8486 Вебмастеру 1 23-11-2007 20:43
работа с XML на CPP Vlad Drakula Программирование и базы данных 1 14-01-2004 00:49




 
Переход