|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Замена текста между определенными символами |
|
CMD/BAT - [решено] Замена текста между определенными символами
|
Новый участник Сообщения: 9 |
Добрый день!
Запускать на компах разрешено ТОЛЬКО *.bat файлы. Есть файлик настроек XML содержащий 2 параметра, которые необходимо периодически менять. 1. Параметр находится между следующими символами ;KeyWord1=" и ";KeyWord2= (т.е. необходимо изменить значение KeyWord1) 2. Параметр находится между <Parametr> и </Parametr> Вечерний серф по безкрайней паутине дал следующие результаты: @echo off set folder=C:\test set conf=test.xml set NewKeyWord=NewKeyWord1 cd %folder% setlocal enabledelayedexpansion for /f "usebackq delims=" %%i in (%conf%) do ( set LINE=%%i rem не знаю как заменить значение KeyWord1 на NewKeyWord1 ) for /F "tokens=* delims=," %%n in (%conf%) do ( set LINE=%%n set LINE=!LINE:^<Parametr^>Enable^</Parametr^>=^<Parametr^>Disable^</Parametr^>! @echo !LINE!>>%temp% ) endlocal |
|
Отправлено: 17:06, 24-04-2021 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата localmaster:
|
|
Отправлено: 04:09, 27-04-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата:
for /f "usebackq delims=^; tokens=2" %%a in (`findstr /rc:"KeyWord1"^=^.*^; %temp%`) do ( set var=%%a echo !var! ) Цитата:
Цитата:
|
|||
Последний раз редактировалось localmaster, 27-04-2021 в 15:27. Отправлено: 14:56, 27-04-2021 | #12 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать правильно, рано или поздно при дальнейших действиях на cmd или его обсуждениях в рамках данной задачи смысл уходит как вода через сито (скромно если, на самом деле быстрее)
|
Отправлено: 02:55, 28-04-2021 | #13 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Вроде с поиском и заменой неизвестного ключа решение найдено.
@echo off setlocal enabledelayedexpansion set conf=Config.xml set temp=temp.xml set kwd=NewKeyWord1 rem проверяю на наличие временного файла и если он есть - удаляю if exist %temp% del /q /f %temp% rem ищу необходимое словосочетание for /f "usebackq delims=^; tokens=2" %%a in (`findstr /rc:"KeyWord1"^=^.*^; %conf%`) do ( set var=%%a rem из словосочетания забираю необходимый для замены ключ for /f "usebackq" %%s in (`cmd /v /c "echo !var:KeyWord1=!"`) do ( set kwrd=%%s ) ) rem цикл записи всех строк во временный файл for /f "tokens=*" %%q in (%conf%) do ( set line=%%q rem записываю все строки во временный файл и при нахождении ключа kwrd в какой-либо строке rem меняет его на ключ kwd echo !line:%kwrd%=%kwd%!>>%temp% ) rem перезаписываем временный файл в конфигурационный файл move /y %temp% %conf% endlocal exit /b Намного упрощенный скрипт отработал на ура. @echo off setlocal enabledelayedexpansion set kwd=123 set kwrd=321 set var="bla=321" set v=!var:%kwrd%=%kwd%! echo %v% endlocal pause exit /b Цитата alpap:
|
|
Последний раз редактировалось localmaster, 28-04-2021 в 13:34. Отправлено: 12:09, 28-04-2021 | #14 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата localmaster:
хочется играться с cmd вот два примера, с поиском и заменой одной строки или сразу двух, разбирайтесь, помогать не буду, я уже отошел от того чтобы писать 20 строк на cmd там где достаточно 2-х, например на xml.exe 1
@echo off setlocal enabledelayedexpansion set "f=file.xml" &: Файл в котором будет замена set "sf=UserId" &: Поиск строки "<UserId>OFFICE\Admin</UserId>" set "sz=%Computername%\%Username%" &: Здесь указать что вместо "OFFICE\Admin" <"%f%">$ (for /f "delims=" %%A in ('more') do @echo "%%~A"|>nul find "%sf%" && ( for /f "tokens=1-3 delims=<>" %%a in ("%%~A") do @set "z=%%b"& echo:^<%%a^>!z:%%b^=%sz%!^<%%c^> ) || ( echo %%A ) )& >nul move $ "%f%" exit 2
@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 |
|
Отправлено: 13:34, 28-04-2021 | #15 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Цитата alpap:
Остался только один вопрос, который задал в своем предыдущем сообщении. А именно, почему значение переменной не меняется правильно при одинаковом подходе к работе с переменными? |
||
Отправлено: 13:54, 28-04-2021 | #16 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Нашел свою ошибку. И она не очевидна для новичка.
@echo off setlocal enabledelayedexpansion set conf=Config.xml set temp=temp.xml set kwd="NewKeyWord1" rem проверяю на наличие временного файла и если он есть - удаляю if exist %temp% del /q /f %temp% rem ищу необходимое словосочетание for /f "usebackq delims=^; tokens=2" %%a in (`findstr /rc:"KeyWord1"^=^.*^; %conf%`) do ( set var=%%a rem из словосочетания забираю необходимый для замены ключ for /f "usebackq" %%s in (`cmd /v /c "echo !var:KeyWord1=!"`) do ( set kwrd=%%s ) ) set kwrd=%kwrd:~1% rem цикл записи всех строк во временный файл for /f "tokens=*" %%q in (%conf%) do ( set line=%%q rem записываю все строки во временный файл и при нахождении ключа kwrd в какой-либо строке rem меняет его на ключ kwd echo !line:%kwrd%=%kwd%!>>%temp% ) rem перезаписываем временный файл в конфигурационный файл move /y %temp% %conf% endlocal exit /b |
Отправлено: 16:29, 30-04-2021 | #17 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - как удалить блок текста между символами | ruslaw | Скриптовые языки администрирования Windows | 3 | 01-07-2015 00:43 | |
Замена текста между двумя подстроками-границами, регулярные выражения в Perl | Тишина | Программирование в *nix | 2 | 11-08-2014 18:59 | |
CMD/BAT - Замена текста | Fevzy | Скриптовые языки администрирования Windows | 9 | 28-04-2013 21:22 | |
CMD/BAT - Поиск строки с определенными символами | dima9069 | Скриптовые языки администрирования Windows | 13 | 26-12-2012 06:44 | |
CMD/BAT - [решено] Замена текста между тегов | vano42 | Скриптовые языки администрирования Windows | 5 | 09-08-2012 13:19 |
|