Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Замена строки в xml с помощью bat (http://forum.oszone.net/showthread.php?t=250457)

iieciiec 02-01-2013 19:38 2057646

Замена строки в xml с помощью bat
 
Здравствуйте. У меня такая проблема: мать играет в игру, там жук стреляет шариками, и спасает других жуков) в игре есть попытки, после уровня 8го 9 го ей нехватает тех попыток что у ней есть она просит меня чтоб я зделал их по больше. Я нашол xml файл в нем написано сколько очков, на каком ты уровне сколько у тебя жизней и т.д. Там есть строка:
<lives value="5"/> где 5 число жизней.
Можно зделать bat файл чтоб он менял эту строку, например на <lives value="90"/>?

zion87 02-01-2013 20:20 2057673

как игра называется????

iieciiec 02-01-2013 21:43 2057731

Tumble Bugs, для чего название нужно?

zion87 02-01-2013 22:11 2057750

файл скиньте пожалуйста(я наверное просто не ту версию игры скачал)

iieciiec 06-01-2013 18:01 2060337

Вложений: 1
Вот файл, находится в папке C:\Users\(имя пользователя)\AppData\Roaming\Wildfire

Foreigner 06-01-2013 19:01 2060385

На PowerShell, имхо, удобней для xml:
Код:

$xmlfile = "$env:AppData\Wildfire\1Arcade.xml"
$xml = new-object xml
$xml.load($xmlfile)
$xml.gamestate.player.lives.value = "90"
$xml.save($xmlfile)


Ortis 07-01-2013 01:02 2060663

Поскольку xml-файл не юникодный, лучше использовать утилиту sed версии 4.2 и выше (правит текст в самом файле с ключем i).
Батник из одной строчки, рядом с xml-файлом.
Код:

sed -ri "/lives value/s/[0-9]+/90/" 1Arcade.xml
ps. Утилита и требуемые ей dll должна находиться в путях переменной %Path%, либо рядом с xml-файлом.

iieciiec 07-01-2013 14:56 2061038

Foreigner, Я запустил PowerShell, он как командная строка, вставил туда Ваш скрипт, все сработало, а как зделать чтоб это было как bat файл, нажал скрипт сделал свое дело и выключился?
Ortis, Ваш вариант тоже сроботал. Только с каждым выполнением bat файла в папке появляются файлы: sedEnb3Nr, sediLpzVy, sedKMIvaD и т.д. всегда разные

Ortis 07-01-2013 17:46 2061196

iieciiec, появление этих файлов говорит о том, что Вы используете устаревшую версию Sed (SuperSed 3.59 или 3.62 или GNU Sed 4.1 или ниже), которые некорректно работают с ключем i.
По поводу запуска скрипта PowerShell, то можно так:
Код:

powershell -executionpolicy unrestricted -file Путь_к_ВашФайл.ps1

iieciiec 07-01-2013 23:08 2061438

Спосибо за помощь, все получилось. Установлен у меня GNU Sed. Вариант с PowerShell мне показался лучше, не надо нечего посторонего устанавливать.

zorgi_morgi 06-02-2014 13:17 2303943

день добрый! помогите пожалуйста! подобная ситуация, только мне нужно удалить символ перевода строки (\n). имеющийся файл xml чем только не открывал, этот символ не отображается, только в xmlpad на вкладке grid view видно.
по вашему примеру и плюс гугл получилось такое
Код:

"c:\Program Files (x86)\GnuWin32\bin\sed.exe" ":a;N;$!ba;s/\n//g" 1.txt > 2.txt
pause

вот такой батник. для примера я создал файл 1.txt
Код:

1.Ехал greka через реку,Видит greka - в реке рак.

2.Ехал greka через реку,Видит greka - в реке рак.

3.Ехал greka через реку,Видит greka - в реке рак.

4.Ехал greka через реку,Видит greka - в реке рак.

5.Ехал greka через реку,Видит greka - в реке рак.

6.Ехал greka через реку,Видит greka - в реке рак.

7.Ехал greka через реку,Видит greka - в реке рак.

8.Ехал greka через реку,Видит greka - в реке рак.

9.Ехал greka через реку,Видит greka - в реке рак.

10.Ехал greka через реку,Видит greka - в реке рак

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

Iska 06-02-2014 13:35 2303955

Цитата:

Цитата zorgi_morgi
имеющийся файл xml »

Не вижу файла xml, упакованного в архив и приложенного к сообщению.

zorgi_morgi 06-02-2014 14:09 2303981

Вложений: 1
  • 1.zip (2.00 KB, скачиваний: 22)
vot primer

User001 06-02-2014 15:54 2304079

Цитата:

Цитата zorgi_morgi
vot primer »

Там разделитель строк \r\n (0x0D, 0x0A).

Georgio 06-02-2014 17:03 2304128

Код:

@ECHO OFF
FOR /F %%I IN ('FIND /C /V ""^<1.txt') DO SET n=%%I
(
 FOR /L %%I IN (1 1 %n%) do (
  SET /P "string="
  CALL SET /P"=%%string%%"<nul
 )
)<1.txt>1_new.txt



Время: 19:28.

Время: 19:28.
© OSzone.net 2001-