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

Показать сообщение отдельно

Ветеран


Сообщения: 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