![]() |
пример BAT-файла, который будет вносить коррективы в .cfg файл
Уважаемые, знающие форумчане. Подскажите пожалуйста абсолютно нулевому в этом деле затейнику :)
Не занимался я освоением 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 |
Цитата:
Цитата:
|
Ka3hak,
Код:
@Echo OFF Кроме того, все пустые строки в файле будут удалены. Лирическое отступление
Сделайте мне суперсовременный компьютер, но, так как мне его обслуживать, пусть он будет простым и на лампах :)
|
Без временных файлов:
Код:
@echo off |
Еще вариант без временных фйайлов
Код:
@Echo OFF |
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,
Код:
Set "cfgIn0=tra la la.cfg" |
Ka3hak,
Можно, пожалуйста, и код полностью
Постановка задачи: Путь\файл.cfg\Папка\файл.bat
В батнике указываем только имя файл.cfg Код:
@Echo OFF "на ~2 секунды запускается консоль cmd" - на форуме сто раз обсуждалось как этого избежать, не вижу смысла искать. "насчёт удаления пустых строк" - моё дело предупредить, это особенность работы батника, и не возьмусь в рамках CMD этого избежать. "после манипуляций, скрипт перестал работать." - без комментариев, я бы предложил Вам описать, что при этом происходит, выдаются ли какие-либо сообщения. А так - нет мыслей. У меня в указанной постановке работает |
ВСЁ РАБОТАЕТ! Большое и жирное СПАСИБО! Задача выполнена на 200%
|
Подскажите ещё вот, "вдовесок" пожалуйста, где ошибка? Или как указать правильный путь...?
В задумке - BAT-ник находит exe-фай, в директории находящейся папкой выше, переименовывает и запускает с параметрами приоритета. Моя корявая версия переименовывает не только exe-шник находящийся папкой выше, но и по одному exe-шнику на своём пути. Я понимаю что код возможно через зад написан :D. Я его наковырял на просторах... Код:
echo off |
Цитата:
Цитата:
Цитата:
|
Код:
@Echo Off |
megaloman спасибо Вам большое! Всё отрабатывает как надо, только вот ещё один момент...
Можно ли прикрутить исключение по имени exe-шника, например с названием "exeshnik.exe"? Ну, чтобы переименовывало любой первый .exe, кроме указанного в исключении. А ещё лучше - нескольких указанных: "exeshnik1.exe", "exeshnik2.exe". |
Код:
@Echo Off |
Добрый вечер 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-ов. Так как в планах размещать свой проект на форумах, то опасаюсь что начнётся паника (ну, вы понимаете). |
Цитата:
Цитата:
|
Окей, продолжаем тему 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-ти сек. Надеюсь понятно изложил суть ;) |
Оформил старый батник как процедуру и вызываем её сколько нужно раз с временнЫми задержками с нужным списком параметров, можно с разным в следующих вызовах. В частности, можно и с одним "BufferSize=траляля"
Код:
@Echo Off Если не хотите видеть аварийное сообщение (а это плохо, батник не работает, а в чём дело, не понятно) лучше не полностью убрать If, а сделать Код:
If Not Exist "%cfgIn%" Exit /B 1 Моё Величие в познаниях BAT весьма скромное |
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 Я так понимаю, что мне мешает "испОлненное оглавление"(выделенное красным) Этот момент как-нибудь обходится? Или нужен абсолютно другой, новый код? |
Ka3hak, как Вы пытаетесь это делать? Не очень помню предыдущую постановку, имхо там были параметры типа
Что то= чему то Здесь другой случай. Ставьте четко задачу. |
megaloman да всё то же самое. Только параметры вида: "#define USE_SPLITSCREEN 1", а не "BufferSize=2048"
Что бы уж наверняка, то вот "огрызок" того самого конфига, в который необходимо внести изменения: Огрызок
/*-----------------------------------------------------------.
/ Description / '------------------------------------------------------------/ Game: Author: SweetFX version: 1.5 Description: Please note when tweaking settings that higher numbers does not always equal better (nor does lower). Finding the best settings for your game and your taste is about finding just the right amount to apply. If you made a good setttings preset please share it with your friends, on forums and websites, and/or submit it to the SweetFX Settings Database : This description field and the above Game and Author fields are here so you can fill in your own details for the presets you create. Just delete this description and fill in your own and then share it with the world. Hope you enjoy my mod. - CeeJay.dk /*-----------------------------------------------------------. / Choose effects / '-----------------------------------------------------------*/ // Set to 1 for ON or 0 for OFF #define USE_SMAA_ANTIALIASING 1 //[0 or 1] SMAA Anti-aliasing : Smoothens jagged lines using the SMAA technique. #define USE_FXAA_ANTIALIASING 0 //[0 or 1] FXAA Anti-aliasing : Smoothens jagged lines using the FXAA technique. WIP - Currently only works in DX9 and you need to use the FXAA injector dlls. #define USE_EXPLOSION 0 //[0 or 1] Explosion : Scatters the pixels, making the image look fuzzy. #define USE_CARTOON 1 //[0 or 1] Cartoon : "Toon"s the image. (Interferes with SMAA, CRT, Bloom, HDR and Lumasharpen) #define USE_ADVANCED_CRT 0 //[0 or 1] Advanced CRT : Simulates an old CRT TV display. (Interferes with SMAA, Cartoon, Bloom, HDR and Lumasharpen, and it has a very high performance cost) #define USE_BLOOM 1 //[0 or 1] Bloom : Makes bright lights bleed their light into their surroundings (relatively high performance cost) #define USE_HDR 1 //[0 or 1] HDR : Not actual HDR - It just tries to mimic an HDR look (relatively high performance cost) #define USE_LUMASHARPEN 1 //[0 or 1] LumaSharpen : Also sharpens the antialiased edges which makes them less smooth - I'm working on fixing that. #define USE_LEVELS 0 //[0 or 1] Levels : Sets a new black and white point. This increases contrast but causes clipping. Use Curves instead if you want to avoid that. #define USE_TECHNICOLOR 0 //[0 or 1] TECHNICOLOR : Attempts to mimic the look of an old movie using the Technicolor three-strip color process (Techicolor Process 4) #define USE_DPX 0 //[0 or 1] Cineon DPX : Should make the image look like it's been converted to DXP Cineon - basically it's another movie-like look similar to technicolor. #define USE_MONOCHROME 0 //[0 or 1] Monochrome : Monochrome makes the colors disappear. #define USE_LIFTGAMMAGAIN 0 //[0 or 1] Lift Gamma Gain : Adjust brightness and color of shadows, midtones and highlights #define USE_TONEMAP 0 //[0 or 1] Tonemap : Adjust gamma, exposure, saturation, bleach and defog. (may cause clipping) #define USE_VIBRANCE 1 //[0 or 1] Vibrance : Intelligently saturates (or desaturates if you use negative values) the pixels depending on their original saturation. #define USE_CURVES 0 //[0 or 1] Curves : Contrast adjustments using S-curves. #define USE_SEPIA 1 //[0 or 1] Sepia : Sepia tones the image. #define USE_VIGNETTE 0 //[0 or 1] Vignette : Darkens the edges of the image to make it look more like it was shot with a camera lens. May cause banding artifacts. #define USE_DITHER 0 //[0 or 1] Dither : Applies dithering to simulate more colors than your monitor can display. This lessens banding artifacts (mostly caused by Vignette) #define USE_BORDER 0 //[0 or 1] Border : Makes the screenedge black as a workaround for the bright edge that forcing some AA modes sometimes causes. #define USE_SPLITSCREEN 1 //[0 or 1] Splitscreen : Enables the before-and-after splitscreen comparison mode. Не получается внести изменения в параметр #define USE_SPLITSCREEN .. |
Цитата:
|
Iska имею ввиду поставленную задачу.
|
Ka3hak, Делать на CMD обработку текстовых файлов - занятие сродни посадке кукурузы за полярным кругом. Урожай не гарантирован. Не берусь утверждать, что скрипт отработает для любых файлов.
Решаю задачу: в текстовом файле имеются строки вида:
ключевое_слово параметр значение комментарий (всё через пробелы) В ключевом_слове, параметре, значении пробелов не должно быть. Заменяются перечисленные в скрипте "параметр значение" Код:
@Echo Off Перечислены изменяемые параметры со значениями "USE_SPLITSCREEN 11111111" "USE_MONOCHROME 000000000" Их может быть несколько, в частности, и какой-то один. Примечание: После работы скрипта пустые строки исходного файла будут потеряны. Цитата:
|
ВСЁ ПРЕКРАСНО!!! :up
Цитата:
|
Время: 18:02. |
Время: 18:02.
© OSzone.net 2001-