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

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

Ответить
Настройки темы
CMD/BAT - [решено] Замена строк.

Аватара для angel_lyucifer

Старожил


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


Конфигурация

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


Привет всем, есть файл config.xml в нём куча строк.
Мне нужно заменить строки
Код: Выделить весь код
<AdvertPlaceholder>1</AdvertPlaceholder>
На
Код: Выделить весь код
<AdvertPlaceholder>0</AdvertPlaceholder>
И
Код: Выделить весь код
<AdvertEastRailsEnabled>1</AdvertEastRailsEnabled>
На
Код: Выделить весь код
<AdvertEastRailsEnabled>0</AdvertEastRailsEnabled>
Я пытался создать скрипт но не получилось, попробуйте исправить мой скрипт пожалуйста...
Код: Выделить весь код
setlocal EnableDelayedExpansion
set filename=%AppData%\Skype\%SLOGIN%\config.xml :Это путь к файлу.
set $filename=%TEMP%\new.txt
for /f "tokens=1* delims=]" %%A in ('find /v /n "" ^<"%filename%"') do (set line=%%B
if "!line!"=="<AdvertEastRailsEnabled>1</AdvertEastRailsEnabled>" (echo ^<AdvertEastRailsEnabled^>0^<^/AdvertEastRailsEnabled^>>>%$filename%) else (echo.!line!>>%$filename%))
del /q %filename%
ren "%$filename%" "%filename%"
for /f "tokens=1* delims=]" %%A in ('find /v /n "" ^<"%filename%"') do (set line=%%B
if "!line!"=="<AdvertPlaceholder>1</AdvertPlaceholder>" (echo ^<AdvertPlaceholder^>0^<^/AdvertPlaceholder^>>>%$filename%) else (echo.!line!>>%$filename%))
del /q %filename%
ren "%$filename%" "%filename%"
pause
exit /b

-------
Век живи, век учись! =)


Отправлено: 02:00, 20-02-2017

 
x0r x0r вне форума

Забанен


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

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


http://forum.oszone.net/post-2667038-9.html

Вообще, такие скрипты пишутся для случаеd поиска и замены во многих файлах сразу. Если файл один, то хороший редактор с регулярками (AkelPad, Sublime, Notepad++, Syn2 ,... тысячи их) быстрей, удобней и проще.

Отправлено: 02:44, 20-02-2017 | #2



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

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


Аватара для angel_lyucifer

Старожил


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

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


Мне нужен бат скрипт!

-------
Век живи, век учись! =)


Отправлено: 03:25, 20-02-2017 | #3

x0r x0r вне форума

Забанен


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

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


↓↓↓
Название темы: [решено] Поиск замена текста

Отправлено: 05:13, 20-02-2017 | #4


Аватара для angel_lyucifer

Старожил


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

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


Наверно нужно экранировать символы?

-------
Век живи, век учись! =)


Отправлено: 05:49, 20-02-2017 | #5


Ветеран


Contributor


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

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


angel_lyucifer,
Вот CMD
Код: Выделить весь код
@Echo Off	

SetLocal EnableExtensions EnableDelayedExpansion

Set "File=%AppData%\Skype\%SLOGIN%\config.xml"
rem Set "File=Z:\Box_In\config.xml" 

Set "Rep1=^<AdvertPlaceholder^>0^</AdvertPlaceholder^>"
Set "Rep2=^<AdvertEastRailsEnabled^>0^</AdvertEastRailsEnabled^>"

>"%File%.bat.tmp" (FOR /F "usebackq delims=" %%s IN (`More "%File%"`) DO Echo %%s)

Set /A N1=0,N2=0,NN=0
FOR /F "usebackq Skip=2 delims=[]" %%n IN (`Find /N "<AdvertPlaceholder>1</AdvertPlaceholder>" "%File%.bat.tmp"`) DO Set N1=%%n
FOR /F "usebackq Skip=2 delims=[]" %%n IN (`Find /N "<AdvertEastRailsEnabled>1</AdvertEastRailsEnabled>" "%File%.bat.tmp"`) DO Set N2=%%n

>"%File%" (FOR /F "usebackq delims=" %%s IN (`More "%File%.bat.tmp"`) DO (
			Set /A NN+=1
			If Not !NN! EQU %N1% If Not !NN! EQU %N2% Echo %%s
			If !NN! EQU %N1% Echo %Rep1%
			If !NN! EQU %N2% Echo %Rep2%
		   ))
DEL "%File%.bat.tmp" 2>NUL
Но надёжнее VBS
Код: Выделить весь код
Set WSS = CreateObject("WScript.Shell")

File_In = WSS.ExpandEnvironmentStrings("%AppData%") + "\Skype\" + WSS.ExpandEnvironmentStrings("%SLOGIN%") + "\config.xml"
        'MsgBox File_In
        'File_In = "Z:\Box_In\config.xml"  ''''''''''''

File_Out = File_In
        'File_Out = "Z:\Box_In\config.xml.vbs.tmp"   ''''''''''''

ReMass = Array( _
    "<AdvertPlaceholder>1</AdvertPlaceholder>", _
    "<AdvertPlaceholder>0</AdvertPlaceholder>", _
    "<AdvertEastRailsEnabled>1</AdvertEastRailsEnabled>", _
    "<AdvertEastRailsEnabled>0</AdvertEastRailsEnabled>" _
)
N1 = LBound(ReMass)
N2 = UBound(ReMass)

'Set "File=%AppData%\Skype\%SLOGIN%\config.xml"

Set FSO = CreateObject("Scripting.FileSystemObject")

Set NFile = FSO.OpenTextFile(File_In, 1, False)
    S = NFile.ReadAll
NFile.Close

For i = N1 To N2 Step 2
    S = Replace(S, ReMass(i), ReMass(i + 1))
Next

Set NFile = FSO.OpenTextFile(File_Out, 2, True)
    NFile.Write S
NFile.Close

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-02-2017 в 11:58.


Отправлено: 10:55, 20-02-2017 | #6


Аватара для angel_lyucifer

Старожил


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

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


Цитата megaloman:
rem Set "File=Z:\Box_In\config.xml" »
Поясните пожалуйста, зачем нужна эта строка?

-------
Век живи, век учись! =)


Отправлено: 18:45, 20-02-2017 | #7


Ветеран


Contributor


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

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


Цитата angel_lyucifer:
Поясните пожалуйста, зачем нужна эта строка? »
Эта строка не работает, она закомментирована (rem .....). Естественно, я не хотел отлаживать скрипт на своём живом рабочем файле, поэтому сделал его копию в этом месте. А не удалил строку - это Вам намёк, что можно точно так же сделать копию Вашего рабочего файла и тестировать скрипты, прописав отладочный путь и убрав коммент (rem). Точно так же и в VBS-скрипте: там тоже есть отладочные закомментированные строки. Кстати, переменной %SLOGIN% у меня не существует. Тем более мне надо иметь свой отладочный путь.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 19:44, 20-02-2017 | #8


Аватара для angel_lyucifer

Старожил


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

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


Цитата megaloman:
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion Set "File=%AppData%\Skype\%SLOGIN%\config.xml" rem Set "File=Z:\Box_In\config.xml" Set "Rep1=^<AdvertPlaceholder^>0^</AdvertPlaceholder^>" Set "Rep2=^<AdvertEastRailsEnabled^>0^</AdvertEastRailsEnabled^>" >"%File%.bat.tmp" (FOR /F "usebackq delims=" %%s IN (`More "%File%"`) DO Echo %%s) Set /A N1=0,N2=0,NN=0 FOR /F "usebackq Skip=2 delims=[]" %%n IN (`Find /N "<AdvertPlaceholder>1</AdvertPlaceholder>" "%File%.bat.tmp"`) DO Set N1=%%n FOR /F "usebackq Skip=2 delims=[]" %%n IN (`Find /N "<AdvertEastRailsEnabled>1</AdvertEastRailsEnabled>" "%File%.bat.tmp"`) DO Set N2=%%n >"%File%" (FOR /F "usebackq delims=" %%s IN (`More "%File%.bat.tmp"`) DO ( Set /A NN+=1 If Not !NN! EQU %N1% If Not !NN! EQU %N2% Echo %%s If !NN! EQU %N1% Echo %Rep1% If !NN! EQU %N2% Echo %Rep2% )) DEL "%File%.bat.tmp" 2>NUL »
Данный скрипт работает но не адекватно.
Он из файла удаляет определённые важные строки...

-------
Век живи, век учись! =)


Отправлено: 20:37, 20-02-2017 | #9


Аватара для angel_lyucifer

Старожил


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

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


Цитата megaloman:
переменной %SLOGIN% у меня не существует. »
Ее создаёт другой мой скрипт, в переменной %SLOGIN% хранится логин от Skype...

-------
Век живи, век учись! =)


Отправлено: 20:55, 20-02-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Замена строк в файле по признаку и маске ВиталийВ Скриптовые языки администрирования Windows 12 13-09-2015 07:54
CMD/BAT - Поиск и замена строк в ini-файлах alex_frog Скриптовые языки администрирования Windows 10 25-11-2014 22:48
PowerShell - [решено] Замена строк по всему массиву. love_fist911 Скриптовые языки администрирования Windows 2 26-08-2013 19:01
CMD/BAT - Замена нескольких строк в файле bcubbs@fb Скриптовые языки администрирования Windows 3 24-01-2013 14:01
CMD/BAT - [решено] Замена строк конфига The_Name Скриптовые языки администрирования Windows 4 22-09-2009 11:19




 
Переход