|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] изменение xml-файла скриптом |
|
Любой язык - [решено] изменение xml-файла скриптом
|
Новый участник Сообщения: 6 |
Искал похожие решения, не получилось. Со скриптовыми языками не знаком.
step1. По пути C:\Documents and Settings\имя пользователя\Application Data\.myfolder находятся несколько xml-файлов. //Пользователей может быть много, имя заранее не известно в одном из них settings.xml много строк вида Цитата:
Цитата:
|
|||
Отправлено: 11:56, 04-06-2013 |
Ветеран Сообщения: 874
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать спасибо, работает!
высланные файлы немного отличаются от первоначальных по причинам, не зависящим от меня. Извиняюсь за неправильную постановку задачи и Ваше потраченное впустую время. по поводу 5 пункта - не важно, какие статусы online или offline будут у других значений, главное, чтобы online был у текущего значения Еще раз спасибо за помощь. Насколько сложно будет дополнить скрипт так, чтобы в файле status.xml удалялись все блоки, кроме искомого (того, который найден в prefs.xml) ? |
Отправлено: 09:42, 07-06-2013 | #12 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата unkilledfore:
|
|
Отправлено: 11:10, 07-06-2013 | #13 |
Ветеран Сообщения: 874
|
Профиль | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|