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

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

Ответить
Настройки темы
CMD/BAT - [решено] Чтение/запись строк из конфигурационного файла в переменную

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


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

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


Приветствую! Есть файл конфигураций для программы setting.xml, имеет следующий вид:
Код: Выделить весь код
<?xml version="1.0" encoding="utf-16"?>
<UserSettingsXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AuthType>Google</AuthType>
  <GoogleUsername>username</GoogleUsername>
  <GooglePassword>password</GooglePassword>
    <Filter>
      <Name>Use</Name>
      <Count>20</Count>
    </Filter>
</UserSettingsXml>
нужно считать, что находится в параметрах в переменные и потом другие значения записать. Я пробовал вот такой конструкцией и массивом:
Код: Выделить весь код
for /f "UseBackQ Delims=" %%A IN ("setting.xml") do (
  set /a c+=1
  if !c!==4 set "a=%%A"
  if !c!==5 set "b=%%A"
)
он не хочет читать, если не взять в кавычки переменную, например
Код: Выделить весь код
  if !c!==4 set "a="%%A""
, вот так работает, но он берет в кавычках всю строку, а нужен username между скобок.
А потом , измененный username запись обратно в файл.
Для очистки "лишнего" пробовал:
Код: Выделить весь код
set sPath=
set sPartPath=
echo !sPath:%sPartPath%=!
но что-то вообще не работает
Заранее спасибо!

Отправлено: 11:30, 30-07-2016

 

Ветеран


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

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


Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set "sf=<GoogleUsername>" &: Поиск строки "<GoogleUsername>username</GoogleUsername>"
set "sz=s_username" &: Здесь указать что вместо username
<"setting.xml">>$ (for /f "delims=" %%a in ('more') do echo "%%a"|>nul find/i "%sf%" && (
   for /f "tokens=1-3 delims=>< " %%b in ("%%~a") do set "z=%%c"& echo:  ^<%%b^>^<!z:%%c=%sz%!^>^<%%d^>
  ) || (
   echo %%a
  )
 )
)
move $ "setting.xml"
exit
.

Последний раз редактировалось alpap, 30-07-2016 в 13:56. Причина: расширение указал как в задаче

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

Отправлено: 13:50, 30-07-2016 | #2



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

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


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


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

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


Цитата alpap:
. »
Спасибо, код работает, но на выходе я получаю:
Код: Выделить весь код
 <GoogleUsername><s_username></GoogleUsername>
, а можно без <>, чисто s_username, т.к программа не прочитает код.
и можно раздельно операцию поиска и отдельно замены?
т.е 1) поиск в файле и внесение в переменную значения между ><
2) Ввод и замена в файле?
Спасибо.

Отправлено: 15:40, 30-07-2016 | #3


Ветеран


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

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


Обе строки:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set "sf1=<GoogleUsername>" &: Поиск строки "<GoogleUsername>username</GoogleUsername>"
set "sf2=<GooglePassword>" &: Поиск строки "<GooglePassword>password</GooglePassword>"
set "sz1=s_username" &: Здесь указать что вместо username
set "sz2=s_password" &: Здесь указать что вместо password
<"setting.xml">>$ (for /f "delims=" %%a in ('more') do @(
  echo "%%~a"|>nul find "%sf1%" && (
   for /f "tokens=1-3 delims=>< " %%b in ("%%~a") do @set "z1=%%c"& echo:  ^<%%b^>^<!z1:%%c=%sz1%!^>^<%%d^>
  ) || (
   echo "%%~a"|>nul find "%sf2%" && for /f "tokens=1-3 delims=>< " %%b in ("%%~a") do @set "z2=%%c"& echo:  ^<%%b^>^<!z2:%%c=%sz2%!^>^<%%d^>
  ) || (
   echo %%a
  )
 )
)
move $ "setting.xml"
exit
.

Цитата anonymous_prodject:
Спасибо, код работает, но на выходе я получаю: »
шутить изволите!
На выходе вы получете
Код: Выделить весь код
<?xml version="1.0" encoding="utf-16"?>
<UserSettingsXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AuthType>Google</AuthType>
  <GoogleUsername><s_username></GoogleUsername>
  <GooglePassword><password></GooglePassword>
    <Filter>
      <Name>Use</Name>
      <Count>20</Count>
    </Filter>
</UserSettingsXml>
с уже заданным вами в строке [set "sz=s_username"] нужным username
иначе для чего все это делается.
Или объясните толком какова конечная цель операции.

Если хотите взять в переменную середину строки [<GoogleUsername>username</GoogleUsername>]:
Код: Выделить весь код
@echo off
<"setting.xml" (for /f "tokens=2 delims=>< " %%a in ('find "<GoogleUsername>"') do @echo %%a)
pause>nul
для другой строки поменяйте find "<GoogleUsername>" на find "<GooglePassword>"

Цитата anonymous_prodject:
А потом , измененный username запись обратно в файл. »
вроде не жалюсь ни на зрение ни на голову.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:03, 30-07-2016 | #4


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


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

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


Да не.. эт я написал все вместе вам, а так буду пихать в разные места в скрипте.
Конечная цель? Написать полноценный скрипт с меню и т.п, при выборе допустим одного пункта он будет искать в файле значения и записывать в переменные. В другом же пункте пользователь вводит значения и они записываются в файл. Да все вроде как знаю, но вот с таким первый раз столкнулся.

Цитата alpap:
На выходе вы получете »
так я знаю, я не писал просто вам весь код, мне нужно без "<>" <s_username>, просто s_username, конечный код типа
Код: Выделить весь код
<?xml version="1.0" encoding="utf-16"?>
<UserSettingsXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AuthType>Google</AuthType>
  <GoogleUsername>s_username</GoogleUsername>
  <GooglePassword>password</GooglePassword>
    <Filter>
      <Name>Use</Name>
      <Count>20</Count>
    </Filter>
</UserSettingsXml>

Отправлено: 17:12, 30-07-2016 | #5


Ветеран


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

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


Цитата alpap:
На выходе вы получете »
В коде лучше выделяйте тэгом «highlight» ([H] на панели), будет заметнее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:19, 30-07-2016 | #6


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


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

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


Вот, неужели, сделал рабочий прототип. Спасибо.
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
<"setting.xml" (for /f "tokens=2 delims=>< " %%a in ('find "<GoogleUsername>"') do @echo %%a)
pause > nul

echo enter mail:
Set /p sz=

set "sf=<GoogleUsername>" &: Поиск строки "<GoogleUsername>username</GoogleUsername>"
<"setting.xml">>$ (for /f "delims=" %%a in ('more') do echo "%%a"|>nul find/i "%sf%" && (
   for /f "tokens=1-3 delims=>< " %%b in ("%%~a") do set "z=%%c"& echo:  ^<%%b^>!z:%%c=%sz%!^<%%d^>
  ) || (
   echo %%a
  )
 )
)
move $ "setting.xml"

Отправлено: 17:46, 30-07-2016 | #7


Ветеран


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

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


Цитата anonymous_prodject:
Написать полноценный скрипт с меню и т.п, при выборе допустим одного пункта он будет искать в файле значения и записывать в переменные. В другом же пункте пользователь вводит значения и они записываются в файл. »
Мне показалось что надо было похожее на это:
Код: Выделить весь код
@echo off
echo Пункт 1.
echo Поиск значения "username" в строке с направлением его в переменную.
echo Пункт 2.
echo Замена значения "username" в файле.
set /p vp="Выберите номер пункта: "
if %vp%==1 call :p1
if %vp%==2 call :p2
exit

:p1
<"setting.xml" (for /f "tokens=2 delims=>< " %%a in ('find "<GoogleUsername>"') do @set "sz=%%a")
echo %sz%
pause& exit/b

:p2
setlocal enabledelayedexpansion
echo enter mail:
set /p sz=
set "sf=<GoogleUsername>" &: Поиск строки "<GoogleUsername>username</GoogleUsername>"
<"setting.xml">>$ (for /f "delims=" %%a in ('more') do echo "%%a"|>nul find/i "%sf%" && (
   for /f "tokens=1-3 delims=>< " %%b in ("%%~a") do set "z=%%c"& echo:  ^<%%b^>!z:%%c=%sz%!^<%%d^>
  ) || (
   echo %%a
  )
 )
)
move $ "setting.xml"
exit/b
.

Отправлено: 19:01, 30-07-2016 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Построчное чтение из файла в переменную Elven Скриптовые языки администрирования Windows 10 05-02-2015 16:55
CMD/BAT - [решено] Чтение определённых строк из файла 4zz Скриптовые языки администрирования Windows 9 25-03-2013 22:26
[решено] Чтение строк из лога и запись их в файл support23 AutoIt 5 18-10-2012 12:04
CMD/BAT - Скрипт, для чтения нужных строк из txt файла в переменную mr.R Скриптовые языки администрирования Windows 1 26-07-2012 12:59
CMD/BAT - [решено] Чтение строки из файла в переменную Николя Скриптовые языки администрирования Windows 42 17-01-2010 19:42




 
Переход