Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] пример BAT-файла, который будет вносить коррективы в .cfg файл (http://forum.oszone.net/showthread.php?t=327297)

Ka3hak 02-06-2017 20:05 2741704

пример 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

Iska 02-06-2017 22:05 2741728

Цитата:

Цитата Ka3hak
Графическую составляющую я уже "победил", »

Чем?

Цитата:

Цитата Ka3hak
Мне нужен пример BAT-файла, который будет вносить коррективы в .cfg файл »

Полагаю, Вам не нужен пакетный файл. Лучше продолжите побеждать тем же средством, что использовалось для «графической составляющей».

megaloman 02-06-2017 22:24 2741734

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

При работе батника создаётся копия исходного файла. Если её надо удалять, уберите rem перед Del
Кроме того, все пустые строки в файле будут удалены.
Лирическое отступление
Сделайте мне суперсовременный компьютер, но, так как мне его обслуживать, пусть он будет простым и на лампах :)

greg zakharov 02-06-2017 22:58 2741739

Без временных файлов:
Код:

@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


megaloman 03-06-2017 00:34 2741757

Еще вариант без временных фйайлов
Код:

@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

Не уверен, стОит ли обходиться без копии исходного файла

Ka3hak 03-06-2017 01:24 2741763

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, и Вам в частности, если всё-таки доведу задумку до ума ;)

Iska 03-06-2017 05:55 2741773

Цитата:

Цитата Ka3hak
Iska, приберегите предположения и поверьте - то самое средство весьма ограничено в функционале и им я могу только запускать исполняемые файлы. »

Я согласен быть счастливым приберечь. Согласен быть богатым поверить проверить. Но как ты, такой большой и толстый, уместился в таком маленьком кувшине Вы не берегите, не стесняйтесь, озвучьте название того самого средства.

megaloman 03-06-2017 14:50 2741849

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
)
.......
.......

Я бы предпочёл, чтобы общение было корректным. Никто никому ничем не обязан. Зачем истерика? ИМХО, Ваш последний пост необходимо удалить

megaloman 04-06-2017 12:28 2741980

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

Аналогично второй вариант. Если в первом варианте батник делает копию исходного файла с именем файл.cfg.tmp, который при желании можно оставить rem Del "%cfgIn%.tmp", а без желания - удалить Del "%cfgIn%.tmp", то второй вариант делает то же, но без создания промежуточного файла.
"на ~2 секунды запускается консоль cmd" - на форуме сто раз обсуждалось как этого избежать, не вижу смысла искать.
"насчёт удаления пустых строк" - моё дело предупредить, это особенность работы батника, и не возьмусь в рамках CMD этого избежать.
"после манипуляций, скрипт перестал работать." - без комментариев, я бы предложил Вам описать, что при этом происходит, выдаются ли какие-либо сообщения. А так - нет мыслей. У меня в указанной постановке работает

Ka3hak 04-06-2017 15:13 2742038

ВСЁ РАБОТАЕТ! Большое и жирное СПАСИБО! Задача выполнена на 200%

Ka3hak 27-06-2017 05:14 2747495

Подскажите ещё вот, "вдовесок" пожалуйста, где ошибка? Или как указать правильный путь...?
В задумке - 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


Iska 27-06-2017 11:29 2747544

Цитата:

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

Находит все исполняемые файлы в каталоге на уровень выше текущего и всех вложенных в него

Цитата:

Цитата Ka3hak
переименовывает »

Неправильно переименовывает. Что должно означать это:
Цитата:

Цитата Ka3hak
ren "%%i" "nullDC_Win32_Release!%%~xi" »

?

megaloman 28-06-2017 08:26 2747747

Код:

@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


Ka3hak 29-06-2017 03:33 2747960

megaloman спасибо Вам большое! Всё отрабатывает как надо, только вот ещё один момент...
Можно ли прикрутить исключение по имени exe-шника, например с названием "exeshnik.exe"?
Ну, чтобы переименовывало любой первый .exe, кроме указанного в исключении. А ещё лучше - нескольких указанных: "exeshnik1.exe", "exeshnik2.exe".

megaloman 29-06-2017 12:49 2748085

Код:

@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


Ka3hak 30-05-2018 20:47 2816210

Добрый вечер 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-ов.
Так как в планах размещать свой проект на форумах, то опасаюсь что начнётся паника (ну, вы понимаете).

Iska 30-05-2018 21:33 2816216

Цитата:

Цитата Ka3hak
Я так понимаю, что зачёркнутые строки не особо нужны. Это ведь всего лишь сообщение "Файл не найден"? »

Они нужны для того, чтобы не возникало панических сообщений вида: «А!!!!!! НИЧО НЕ РАБОТАЕТ!!!!».


Цитата:

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

Проще всего — переписать весь код на WSH, дабы не громоздить Пелион на Оссу. Можно даже не переписывать, а взять любой из готовых вариантов VBScript-кода для работы с ini-файлами.

Ka3hak 07-06-2018 01:04 2817185

Окей, продолжаем тему 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-ти сек. Надеюсь понятно изложил суть ;)

megaloman 07-06-2018 14:22 2817256

Оформил старый батник как процедуру и вызываем её сколько нужно раз с временнЫми задержками с нужным списком параметров, можно с разным в следующих вызовах. В частности, можно и с одним "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 весьма скромное

Ka3hak 10-06-2018 18:29 2817778

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
Я так понимаю, что мне мешает "испОлненное оглавление"(выделенное красным)
Этот момент как-нибудь обходится? Или нужен абсолютно другой, новый код?

megaloman 10-06-2018 18:50 2817783

Ka3hak, как Вы пытаетесь это делать? Не очень помню предыдущую постановку, имхо там были параметры типа
Что то= чему то
Здесь другой случай. Ставьте четко задачу.

Ka3hak 10-06-2018 19:48 2817790

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 10-06-2018 20:18 2817792

Цитата:

Цитата Ka3hak
megaloman да всё то же самое. »

Ka3hak, вот совсем не «то же самое».

Ka3hak 10-06-2018 20:26 2817793

Iska имею ввиду поставленную задачу.

megaloman 12-06-2018 14:50 2817968

Ka3hak, Делать на CMD обработку текстовых файлов - занятие сродни посадке кукурузы за полярным кругом. Урожай не гарантирован. Не берусь утверждать, что скрипт отработает для любых файлов.
Решаю задачу: в текстовом файле имеются строки вида:
ключевое_слово параметр значение комментарий (всё через пробелы)
В ключевом_слове, параметре, значении пробелов не должно быть.
Заменяются перечисленные в скрипте "параметр значение"
Код:

@Echo Off
Set "FileIn=Z:\Box_In\тра ля ля.cfg"
Set "Keyword=#define"
Set Param="USE_SPLITSCREEN 11111111" "USE_MONOCHROME 000000000"

Set "FileTmp=%FileIn%.tmp"

>"%FileTmp%" (
        FOR /F "usebackq delims=" %%s IN ("%FileIn%") DO Call :Analysys "%%s" &&Echo %%s
)
Copy "%FileIn%" "%FileIn%.bak" >nul
Move /Y "%FileTmp%" "%FileIn%" >nul
GoTo :Eof

:Analysys
        FOR /F "tokens=1,2,3* delims= " %%i IN (%1) DO Call :Output "%%i" "%%j" "%%k" "%%l" %Param% &&Exit /B 0
GoTo :Eof

:Output
        If /I Not "%~1"=="%Keyword%" Exit /B 0
        :Begin
                If "%~5"=="" Exit /B 0
        FOR /F "tokens=1,2 delims= " %%a IN (%5) DO If /I Not "%%a"=="%~2" Shift /5 &GoTo :Begin
        Echo %Keyword% %~5 %~4
Exit /B 1

Здесь ключевое_слово прописано как #define
Перечислены изменяемые параметры со значениями "USE_SPLITSCREEN 11111111" "USE_MONOCHROME 000000000"
Их может быть несколько, в частности, и какой-то один.
Примечание: После работы скрипта пустые строки исходного файла будут потеряны.
Цитата:

Цитата megaloman
Не очень помню предыдущую постановку, имхо там были параметры типа
Что то= чему то
Здесь другой случай. »


Ka3hak 14-06-2018 05:15 2818164

ВСЁ ПРЕКРАСНО!!! :up
Цитата:

Цитата megaloman
Не берусь утверждать, что скрипт отработает для любых файлов. »

Главное что всё рабатает в нужном мне .txt-файле.


Время: 12:27.

Время: 12:27.
© OSzone.net 2001-