|
Компьютерный форум 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 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Подскажите ещё вот, "вдовесок" пожалуйста, где ошибка? Или как указать правильный путь...?
В задумке - BAT-ник находит exe-фай, в директории находящейся папкой выше, переименовывает и запускает с параметрами приоритета. Моя корявая версия переименовывает не только exe-шник находящийся папкой выше, но и по одному exe-шнику на своём пути. Я понимаю что код возможно через зад написан :D. Я его наковырял на просторах... |
Последний раз редактировалось Ka3hak, 27-06-2017 в 05:35. Отправлено: 05:14, 27-06-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
Цитата Ka3hak:
Цитата Ka3hak:
|
|||
Отправлено: 11:29, 27-06-2017 | #12 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 08:26, 28-06-2017 | #13 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать megaloman спасибо Вам большое! Всё отрабатывает как надо, только вот ещё один момент...
Можно ли прикрутить исключение по имени exe-шника, например с названием "exeshnik.exe"? Ну, чтобы переименовывало любой первый .exe, кроме указанного в исключении. А ещё лучше - нескольких указанных: "exeshnik1.exe", "exeshnik2.exe". |
Последний раз редактировалось Petya V4sechkin, 29-06-2017 в 17:59. Причина: пункт 3.1 http://forum.oszone.net/rules.html Отправлено: 03:33, 29-06-2017 | #14 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off Set "Exe=nullDC_Win32_Release.exe" Set "Exclude="exe1.exe" "exe2.exe" "exe3.exe"" Set "DirBat=%~dp0" FOR /F "delims=" %%d IN ("%DirBat:~0,-1%") DO Pushd "%%~dpd" FOR %%f IN (*.exe) DO If Not Exist "%Exe%" ( Echo %Exclude% | Find /I """%%f""" >nul ||Ren "%%f" "%Exe%" ) If Exist "%Exe%" Start " " /Realtime "%Exe%" Popd |
------- Последний раз редактировалось megaloman, 29-06-2017 в 13:13. Отправлено: 12:49, 29-06-2017 | #15 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Добрый вечер megaloman! Тут ещё вопросик возник...
Касательно кода: Батник
@Echo OFF
Set "cfgIn0=..\..\..\nullDC.cfg" Set Rep="BufferSize=2048" Set "cfgIn=%~dp0" FOR /F "usebackq delims=" %%j IN ('%cfgIn:~0,-1%') DO Set "cfgIn=%%~dpj%cfgIn0%" 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%) 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 Я так понимаю, что зачёркнутые строки не особо нужны. Это ведь всего лишь сообщение "Файл не найден"? И ещё момент вот в чём... Как мне прикрутить сюда скрипт .VBS, для того, чтобы .BAT-ник отрабатывал в скрытом режиме, ну т.е. - никаких консольных окон (даже на долю секунды). Я использовал также Bat To Exe Converter для превращения .BAT-ников в .exe-шники, но этот вариант меня не совсем устраивает, т.к. VirusTotal видит их как Trojan-ов. Так как в планах размещать свой проект на форумах, то опасаюсь что начнётся паника (ну, вы понимаете). |
Отправлено: 20:47, 30-05-2018 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
Цитата Ka3hak:
|
||
Отправлено: 21:33, 30-05-2018 | #17 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Окей, продолжаем тему BAT. Вопрос к megaloman. Повторяюсь к megaloman!!! Уповаю на ваше Величие в познаниях BAT.
Как прикрутить к BAT-нику таймер на внесение изменений в параметр Set Rep="BufferSize=2048"? Т.е. сначала вносится значение "2048" и после, ~через 5 сек. значение меняется на "4096", либо строка целиком - на строку Set Rep="BufferSize=4096" (не суть) Батник
@Echo OFF
Set "cfgIn0=..\..\..\nullDC.cfg" Set Rep="BufferSize=2048" 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%) 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-ой BAT-файл, который будет отрабатывать не сразу после запуска, а по истечении (в нашем примере) 5-ти сек. Надеюсь понятно изложил суть ![]() |
Отправлено: 01:04, 07-06-2018 | #18 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Оформил старый батник как процедуру и вызываем её сколько нужно раз с временнЫми задержками с нужным списком параметров, можно с разным в следующих вызовах. В частности, можно и с одним "BufferSize=траляля"
@Echo Off
Set "cfgIn0=Box_In\nullDC.cfg"
Call :Main "BufferSize=2048" "Dreamcast.Region=333" "Dreamcast.Broadcast=444" "Dreamcast.RTC=5552127595098"
Timeout /T 5 >nul
rem ping -n 5 127.0.0.1>nul
Call :Main "BufferSize=4096" "Dreamcast.Region=aaa333" "Dreamcast.Broadcast=aaa444" "Dreamcast.RTC=aaa5552127595098"
GoTo :Eof
:Main
Set Rep=%*
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:
Exit /B 1
)
.....................................
.....................................
Если не хотите видеть аварийное сообщение (а это плохо, батник не работает, а в чём дело, не понятно) лучше не полностью убрать If, а сделать , чтобы сохранилась хотя бы предсказуемость работы скрипта Моё Величие в познаниях BAT весьма скромное |
------- Отправлено: 14:22, 07-06-2018 | #19 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать megaloman Вы ВОЛШЕБНИК!!! Всё прекрасно работает! И крайний вопросик на будущее...
BAT-ник никак не хочет отрабатывать в файле подобного содержания: конфиг SweetFX
/*-----------------------------------------------------------.
/ Choose effects / '-----------------------------------------------------------*/ // Set to 1 for ON or 0 for OFF #define USE_SMAA_ANTIALIASING 1 //[0 or 1] #define USE_FXAA_ANTIALIASING 0 //[0 or 1] #define USE_EXPLOSION 0 //[0 or 1] #define USE_CARTOON 1 //[0 or 1] #define USE_ADVANCED_CRT 0 //[0 or 1] #define USE_BLOOM 1 //[0 or 1] #define USE_HDR 1 //[0 or 1] #define USE_SPLITSCREEN 1 //[0 or 1] Не получается внести изменения в параметр строки #define USE_SPLITSCREEN Я так понимаю, что мне мешает "испОлненное оглавление"(выделенное красным) Этот момент как-нибудь обходится? Или нужен абсолютно другой, новый код? |
Отправлено: 18:29, 10-06-2018 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|