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

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

Ответить
Настройки темы
Любой язык - [решено] изменение xml-файла скриптом

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


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

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


Искал похожие решения, не получилось. Со скриптовыми языками не знаком.

step1. По пути C:\Documents and Settings\имя пользователя\Application Data\.myfolder находятся несколько xml-файлов. //Пользователей может быть много, имя заранее не известно
в одном из них settings.xml много строк вида

Цитата:
<pref name="savedstatus">
<pref name="default" type="int" value="1354262942" />
<pref name="startup" type="int" value="0" />
<pref name="startup_current_status" type="bool" value="1" />
<pref name="idleaway" type="int" value="1354193083" />
<pref name="isidleaway" type="bool" value="0" />
</pref>
step2. Выделенное значение динамическое (числовое), может меняться. Это значение надо найти в другом файле в этой же папке stat.xml и установить там значения offline в online. Если там уже стоит online, оставить как есть.

Цитата:
<status name="Auto-Cached" transient="true" created="1354262942" lastused="1354262942" usage_count="1">
<state>offline</state>
<substatus>
<state>offline</state>
</substatus>
</status>

Отправлено: 11:56, 04-06-2013

 

Ветеран


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

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


1. В выложенных XML-файлах все значения оказались не в двойных кавычках, как приводится в условиях задачи, а в одинарных, что, "мягко выражаясь", наводит на мысль об использовании в циклах во избежание всяческих недоразумений (снова "мягко выражаясь") другой семантики (ключ "usebackq" и обратные одинарные кавычки).

2. В отличие от условий задачи, слеш и закрывающая угловая скобка в конце строк в файле prefs.xml (он же -- settings.xml) не отделены пробелом от остальной части строки, а пробел -- зто первое, что приходит в голову при назначении разделителей.

3. С кодировками у файлов все в порядке -- не Unicode (слава Богу).

4. Если выложенные файлы копировались синхронно, то не факт, что для числового значения из файла prefs.xml (он же -- settings.xml) в файле status.xml (он же -- stat.xml) статус будет "offline" или "online",-- в выложенном файле для искомого значения статус "available".

5. Непонятно, хорошо это или плохо, если для двух, как минимум, значений статус будет "online".


С учётом первых четырёх пунктов BAT-файл был практически полностью переделан.

Код: Выделить весь код
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION>status_new.xml
SET SettingsFile=prefs.xml
SET StatusFile=status.xml
FOR /F "usebackq tokens=6 delims='" %%I IN (`FINDSTR /C:"<pref name='default' type='int' value='" "%SettingsFile%"`) DO (
 FOR /F "usebackq tokens=1,7 delims=:'" %%J IN (`FINDSTR /N %%I "%StatusFile%"`) DO (
  IF %%K==%%I (
   SET /A VAR1=%%J+1
   SET /A VAR2=%%J+4
)))&&^
FOR /F "usebackq tokens=1* delims=:" %%I IN (`FINDSTR /N /R . "%StatusFile%"`) DO (
  IF %%I==!VAR1! (
   ECHO ^<state^>online^</state^>>>status_new.xml
) ELSE (
   IF %%I==!VAR2! (
    ECHO ^<state^>online^</state^>>>status_new.xml
 ) ELSE (
    SET /P "VAR3=%%J" 0>nul 1>>status_new.xml
    ECHO.>>status_new.xml
)))&&^
TYPE status_new.xml>"%StatusFile%"
DEL status_new.xml

Последний раз редактировалось Georgio, 07-06-2013 в 09:33. Причина: пропущенная запятая в тексте

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:12, 07-06-2013 | #11



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

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


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


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

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


спасибо, работает!
высланные файлы немного отличаются от первоначальных по причинам, не зависящим от меня. Извиняюсь за неправильную постановку задачи и Ваше потраченное впустую время.
по поводу 5 пункта - не важно, какие статусы online или offline будут у других значений, главное, чтобы online был у текущего значения
Еще раз спасибо за помощь.

Насколько сложно будет дополнить скрипт так, чтобы в файле status.xml удалялись все блоки, кроме искомого (того, который найден в prefs.xml) ?

Отправлено: 09:42, 07-06-2013 | #12


Ветеран


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

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


Цитата unkilledfore:
Насколько сложно будет дополнить скрипт так, чтобы в файле status.xml удалялись все блоки, кроме искомого (того, который найден в prefs.xml) ? »
Это возможно. Я подумаю.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:10, 07-06-2013 | #13


Ветеран


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

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


unkilledfore, "испытайте":

Код: Выделить весь код
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET SettingsFile=prefs.xml
SET StatusFile=status.xml
FOR /F "tokens=6 delims='" %%I IN ('FINDSTR /C:"<pref name='default' type='int' value='" "%SettingsFile%"') DO (
 FOR /F "usebackq tokens=1,7 delims=:'" %%J IN (`FINDSTR /N %%I "%StatusFile%"`) DO (
  IF %%K==%%I (
   FOR /L %%L IN (1,1,7) DO (
    SET /A VAR%%L=%%J+%%L-1
    ECHO ^<?xml version='1.0' encoding='UTF-8' ?^>>status_new.xml
    ECHO ^<statuses version='1.0'^>>>status_new.xml
))))&&(
FOR /F "usebackq tokens=1* delims=:" %%I IN (`FINDSTR /N /R . "%StatusFile%"`) DO (
 IF %%I==!VAR1! (
  SET /P p="%%J" 0>nul 1>>status_new.xml
  ECHO.>>status_new.xml
)
 IF %%I==!VAR2! (
  ECHO ^<state^>online^</state^>>>status_new.xml
)
 IF %%I==!VAR3! (
  ECHO ^<substatus^>>>status_new.xml
)
 IF %%I==!VAR4! (
  SET /P p="%%J" 0>nul 1>>status_new.xml
  ECHO.>>status_new.xml
)
 IF %%I==!VAR5! (
  ECHO ^<state^>online^</state^>>>status_new.xml
)
 IF %%I==!VAR6! (
  ECHO ^</substatus^>>>status_new.xml
)
 IF %%I==!VAR7! (
  ECHO ^</status^>>>status_new.xml
)))&&^
ECHO ^</statuses^>>>status_new.xml&&^
TYPE status_new.xml>"%StatusFile%"
DEL status_new.xml
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:05, 08-06-2013 | #14



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] помогите со скриптом перемещения файла. igor-kineshma Скриптовые языки администрирования Windows 1 09-01-2013 14:29
Помогите со скриптом модификации файла xls Pozia AutoIt 5 16-04-2011 22:11
[решено] проверка XML-файла на соответствие XML schema в IE 6 и Firefox 2 dimait Вебмастеру 4 23-08-2007 02:02
Помогите со скриптом для поиска файла. vlazari Microsoft Windows 2000/XP 2 27-06-2006 14:39
Схема для XML файла Skynet Программирование и базы данных 3 22-03-2005 14:57




 
Переход