|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] пример BAT-файла, который будет вносить коррективы в .cfg файл |
|
|
CMD/BAT - [решено] пример BAT-файла, который будет вносить коррективы в .cfg файл
|
Новый участник Сообщения: 33 |
Уважаемые, знающие форумчане. Подскажите пожалуйста абсолютно нулевому в этом деле затейнику
![]() Не занимался я освоением BAT, потому как думал - обошёл это, мол.. Бог миловал. Но не тут-то было! И нет времени на освоение с нуля. Чутка предыстории, позвольте. Начал разработку оболочки для настройки эмулятора игровой приставки. Она должна быть визуальна понятной и доступной для рядового пользователя, всё должно делаться чуть ли не с одной кнопки. Жалко коллег-форумчан RuTracker-а у которых уже головы пухнут от постоянных, однотипных объяснений типа: "Нажмите то, потом то... Не помогло? Тогда вот это!" и т.д. Ну, в общем вы поняли. Хочу помогать людям ![]() Графическую составляющую я уже "победил", а все необходимые настройки планирую вносить/выполнять по средствам BAT-файлов. К делу. Мне нужен пример BAT-файла, который будет вносить коррективы в .cfg файл. Причём, как я понимаю нет необходимости отыскивать там какой-то определённый раздел. Просто BAT-ник находит, к примеру, строку Dynarec.Enabled=1 и изменяет её на Dynarec.Enabled=0, или DefaultImage=defualt.gdi на DefaultImage=image.gdi Т.е. не обязательно 1 на 0, или defualt на image.. можно строку пОлностью. Так мне кажется даже проще будет. Вот так, просто.. пожалуйста. Без эпических супер-кодов. Чтобы и я мог понять что происходит. Потому, как мне с этим в дальнейшем работать. .cfg файл примерно такого содержания: [nullDC] Dynarec.Enabled=1 DefaultImage=defualt.gdi Dynarec.DoConstantPropagation=1 Dynarec.SafeMode=1 Dynarec.UnderclockFpu=0 Dreamcast.Cable=3 Dreamcast.RTC=2127595098 Dreamcast.Region=3 Dreamcast.Broadcast=4 Emulator.AutoStart=0 Emulator.NoConsole=0 |
|
Отправлено: 20:05, 02-06-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:05, 02-06-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Ka3hak,
@Echo OFF Set "cfgIn=Z:\Soft_In\tra la la.cfg" Set Rep="Dreamcast.Region=333" "Dreamcast.Broadcast=444" "Dreamcast.RTC=5552127595098" "DefaultImage=image.gdi" "Dynarec.Enabled=0" Copy "%cfgIn%" "%cfgIn%.tmp" >nul >"%cfgIn%" (FOR /F "usebackq tokens=*" %%a IN ("%cfgIn%.tmp") DO Call :Rezult "%%a" %Rep%) rem Del "%cfgIn%.tmp" GoTo :Eof :Rezult Set "InStr=%~1" FOR /F "usebackq eol==" %%i IN ('%InStr%') DO Set "Par1=%%i" :Begin FOR /F "usebackq eol==" %%j IN ('%~2') DO Set "Par2=%%j" If /I "%Par1%"=="%Par2%" Set "InStr=%~2" &GoTo :End Shift If Not "%~2"=="" GoTo :Begin :End Echo %InStr% GoTo :Eof Кроме того, все пустые строки в файле будут удалены. Лирическое отступление
Сделайте мне суперсовременный компьютер, но, так как мне его обслуживать, пусть он будет простым и на лампах
![]() |
------- Последний раз редактировалось megaloman, 03-06-2017 в 00:50. Отправлено: 22:24, 02-06-2017 | #3 |
Забанен Сообщения: 793
|
Без временных файлов:
@echo off setlocal enabledelayedexpansion set "cfg=%~dp0test.cfg" call:getlinenumbers "!cfg!" n call:setaltdata "!cfg!" !n! more < "%~dp0test.cfg:s" > "!cfg!" endlocal exit /b :getlinenumbers for /f %%i in ('find /v /c "" ^< "%~1"') do set "%~2=%%i" exit /b :setaltdata 3<"%~1" (for /l %%i in (1, 1, %2) do ( <nul set /p s=<&3 call:replace dynamic.enabled 1 0 call:replace defaultimage default image echo !s! ))>>"%~1:s" exit /b :replace echo !s!|>nul findstr /irc:"%~1"&set "s=!s:%~2=%~3!" exit /b |
Отправлено: 22:58, 02-06-2017 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Еще вариант без временных фйайлов
@Echo OFF Set "cfgIn=Z:\Soft_In\tra la la.cfg" Set Rep="Dreamcast.Region=333" "Dreamcast.Broadcast=444" "Dreamcast.RTC=5552127595098" "DefaultImage=image.gdi" "Dynarec.Enabled=0" Set /A N1=10000 Set /A N=%N1%-1 FOR /F "usebackq tokens=*" %%a IN ("%cfgIn%") DO Call :MassTo "%%a" >"%cfgIn%" (FOR /L %%i IN (%N1%,1,%N%) DO Call :MassFrom "A%%i") GoTo :Eof :Rezult Set "InStr=%~1" FOR /F "usebackq eol==" %%i IN ('%InStr%') DO Set "Par1=%%i" :Begin FOR /F "usebackq eol==" %%j IN ('%~2') DO Set "Par2=%%j" If /I "%Par1%"=="%Par2%" Set "InStr=%~2" &GoTo :End Shift If Not "%~2"=="" GoTo :Begin :End Echo %InStr% GoTo :Eof :MassTo Set /A N+=1 Set "A%N%=%1" GoTo :Eof :MassFrom Call Set "Arg=%%%~1%%" Call :Rezult %Arg% %Rep% GoTo :Eof |
|
------- Отправлено: 00:34, 03-06-2017 | #5 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Iska, приберегите предположения и поверьте - то самое средство весьма ограничено в функционале и им я могу только запускать исполняемые файлы.
greg zakharov не совсем понял как работает ваш пример. Точнее вообще не понял и он у меня почему-то не работает. А так, я бы с удовольствием и с ним поэкспериментировал ![]() megaloman спасибо большое, КЛАСС!(от всей души) Порадовало ваше "Лирическое отступление" :D Вот только несколько вопросиков: 1. чем отличаются коды первого и второго примеров? Работают-то они в принципе одинаково о_О 2. на ~2 секунды запускается консоль cmd. Я так понял её не убрать? 3. я уже понял, что в Set "cfgIn=Z:\Soft_In\tra la la.cfg" можно указать просто "cfgIn=tra la la.cfg", если BAT-ник в корневой, а как поместить BAT-файл в подпапку корневой, без указания директории, т.е. "tra la la.cfg" в корневой эмулятора, а BAT в "Корневая_папка\BATS\BAT.bat" 4. и ещё один вопросик - на счёт удаления пустых строк. Сейчас это без надобности, всё и так прекрасно работает, но... Уверен пригодится в будущем! Обещаю выразить благодарность в описании, форуму OSzone, и Вам в частности, если всё-таки доведу задумку до ума ![]() |
Последний раз редактировалось Ka3hak, 03-06-2017 в 02:31. Отправлено: 01:24, 03-06-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
|
|
Отправлено: 05:55, 03-06-2017 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Ka3hak,
Set "cfgIn0=tra la la.cfg" Set Rep="Dreamcast.Region=333" "Dreamcast.Broadcast=444" "Dreamcast.RTC=5552127595098" "DefaultImage=image.gdi" "Dynarec.Enabled=0" Set "cfgIn=%~dp0" FOR /F "usebackq delims=" %%j IN ('%cfgIn:~0,-1%') DO Set "cfgIn=%%~dpj%cfgIn0%" If Not Exist "%cfgIn%" ( Echo ????? Файл %cfgIn% не найден !!!!! pause GoTo :Eof ) ....... ....... |
------- Отправлено: 14:50, 03-06-2017 | #8 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Ka3hak,
Можно, пожалуйста, и код полностью
Постановка задачи: Путь\файл.cfg\Папка\файл.bat
В батнике указываем только имя файл.cfg @Echo OFF Set "cfgIn0=tra la la.cfg" Set Rep="Dreamcast.Region=333" "Dreamcast.Broadcast=444" "Dreamcast.RTC=5552127595098" "DefaultImage=image.gdi" "Dynarec.Enabled=0" Set "cfgIn=%~dp0" FOR /F "usebackq delims=" %%j IN ('%cfgIn:~0,-1%') DO Set "cfgIn=%%~dpj%cfgIn0%" If Not Exist "%cfgIn%" ( Echo: Echo ????? File %cfgIn% not found !!!!! Echo: pause GoTo :Eof ) Copy "%cfgIn%" "%cfgIn%.tmp" >nul >"%cfgIn%" (FOR /F "usebackq tokens=*" %%a IN ("%cfgIn%.tmp") DO Call :Rezult "%%a" %Rep%) rem Del "%cfgIn%.tmp" GoTo :Eof :Rezult Set "InStr=%~1" FOR /F "usebackq eol==" %%i IN ('%InStr%') DO Set "Par1=%%i" :Begin FOR /F "usebackq eol==" %%j IN ('%~2') DO Set "Par2=%%j" If /I "%Par1%"=="%Par2%" Set "InStr=%~2" &GoTo :End Shift If Not "%~2"=="" GoTo :Begin :End Echo %InStr% GoTo :Eof "на ~2 секунды запускается консоль cmd" - на форуме сто раз обсуждалось как этого избежать, не вижу смысла искать. "насчёт удаления пустых строк" - моё дело предупредить, это особенность работы батника, и не возьмусь в рамках CMD этого избежать. "после манипуляций, скрипт перестал работать." - без комментариев, я бы предложил Вам описать, что при этом происходит, выдаются ли какие-либо сообщения. А так - нет мыслей. У меня в указанной постановке работает |
------- Отправлено: 12:28, 04-06-2017 | #9 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать ВСЁ РАБОТАЕТ! Большое и жирное СПАСИБО! Задача выполнена на 200%
|
Последний раз редактировалось Ka3hak, 04-06-2017 в 15:36. Отправлено: 15:13, 04-06-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - bat файл, который создаст 2 bat файла | mazahaka2000@vk | Скриптовые языки администрирования Windows | 1 | 17-06-2015 22:07 | |
CMD/BAT - [решено] bat файл, при запуске которого в файле .cfg стирался весь текст и вставлялся новый | kennydzzze | Скриптовые языки администрирования Windows | 3 | 21-07-2014 10:53 | |
CMD/BAT - bat который будет дописывать строки в конец файла | infoman1@vk | Скриптовые языки администрирования Windows | 9 | 11-07-2014 22:21 | |
CMD/BAT - bat который будет дописываться в exe | infoman1@vk | Скриптовые языки администрирования Windows | 1 | 10-06-2014 18:39 | |
CMD/BAT - [решено] Создание bat который будет создавать другой bat для создания 3 | root13 | Скриптовые языки администрирования Windows | 5 | 27-10-2013 15:46 |
|