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

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

Ответить
Настройки темы
CMD/BAT - [решено] пример BAT-файла, который будет вносить коррективы в .cfg файл

Аватара для Ka3hak

Новый участник


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

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


Изменения
Автор: Ka3hak
Дата: 02-06-2017
Уважаемые, знающие форумчане. Подскажите пожалуйста абсолютно нулевому в этом деле затейнику
Не занимался я освоением 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

 

Аватара для Ka3hak

Новый участник


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

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


Подскажите ещё вот, "вдовесок" пожалуйста, где ошибка? Или как указать правильный путь...?
В задумке - BAT-ник находит exe-фай, в директории находящейся папкой выше, переименовывает и запускает с параметрами приоритета.
Моя корявая версия переименовывает не только exe-шник находящийся папкой выше, но и по одному exe-шнику на своём пути.
Я понимаю что код возможно через зад написан :D. Я его наковырял на просторах...

Код: Выделить весь код
echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=*" %%i in ('dir /b /s "..\*.exe"') do (
	ren "%%i" "nullDC_Win32_Release!%%~xi"
)
endlocal

start /realtime "\" nullDC_Win32_Release.exe
popd

echo

Последний раз редактировалось Ka3hak, 27-06-2017 в 05:35.


Отправлено: 05:14, 27-06-2017 | #11



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

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


Ветеран


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

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


Цитата Ka3hak:
В задумке - BAT-ник находит exe-фай, в директории находящейся папкой выше, »
Находит все исполняемые файлы в каталоге на уровень выше текущего и всех вложенных в него

Цитата Ka3hak:
переименовывает »
Неправильно переименовывает. Что должно означать это:
Цитата Ka3hak:
ren "%%i" "nullDC_Win32_Release!%%~xi" »
?

Отправлено: 11:29, 27-06-2017 | #12


Ветеран


Contributor


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

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


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

Set "Exe=nullDC_Win32_Release.exe"

Set "DirBat=%~dp0"
FOR /F "delims=" %%d IN ("%DirBat:~0,-1%") DO Pushd "%%~dpd"

FOR %%f IN (*.exe) DO If Not Exist "%Exe%" Ren "%%f" "%Exe%"

If Exist "%Exe%" Start " " /Realtime "%Exe%"  
Popd

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:26, 28-06-2017 | #13


Аватара для Ka3hak

Новый участник


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

Профиль | Отправить 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


Ветеран


Contributor


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

Профиль | Отправить 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


Аватара для Ka3hak

Новый участник


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

Профиль | Отправить 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%"

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

Я так понимаю, что зачёркнутые строки не особо нужны. Это ведь всего лишь сообщение "Файл не найден"?
И ещё момент вот в чём... Как мне прикрутить сюда скрипт .VBS, для того, чтобы .BAT-ник отрабатывал в скрытом режиме, ну т.е. - никаких консольных окон (даже на долю секунды).
Я использовал также Bat To Exe Converter для превращения .BAT-ников в .exe-шники, но этот вариант меня не совсем устраивает, т.к. VirusTotal видит их как Trojan-ов.
Так как в планах размещать свой проект на форумах, то опасаюсь что начнётся паника (ну, вы понимаете).

Отправлено: 20:47, 30-05-2018 | #16


Ветеран


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

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


Цитата Ka3hak:
Я так понимаю, что зачёркнутые строки не особо нужны. Это ведь всего лишь сообщение "Файл не найден"? »
Они нужны для того, чтобы не возникало панических сообщений вида: «А!!!!!! НИЧО НЕ РАБОТАЕТ!!!!».


Цитата Ka3hak:
Как мне прикрутить сюда скрипт .VBS, для того, чтобы .BAT-ник отрабатывал в скрытом режиме, ну т.е. - никаких консольных окон (даже на долю секунды).
Я использовал также Bat To Exe Converter для превращения .BAT-ников в .exe-шники, но этот вариант меня не совсем устраивает, т.к. VirusTotal видит их как Trojan-ов. »
Проще всего — переписать весь код на WSH, дабы не громоздить Пелион на Оссу. Можно даже не переписывать, а взять любой из готовых вариантов VBScript-кода для работы с ini-файлами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:33, 30-05-2018 | #17


Аватара для Ka3hak

Новый участник


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

Профиль | Отправить 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


Ветеран


Contributor


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

Профиль | Отправить 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
)
.....................................
.....................................
Таймаут организован утилитой Timeout (начиная, по крайней мере, с Win 7, она присутствует в системе. В противном случае таймаут можно организовать через Ping (в моём примере он закомментирован)
Если не хотите видеть аварийное сообщение (а это плохо, батник не работает, а в чём дело, не понятно) лучше не полностью убрать If, а сделать
Код: Выделить весь код
If Not Exist "%cfgIn%" Exit /B 1
, чтобы сохранилась хотя бы предсказуемость работы скрипта

Моё Величие в познаниях BAT весьма скромное

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:22, 07-06-2018 | #19


Аватара для Ka3hak

Новый участник


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

Профиль | Отправить 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход