|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение параметров в .ini файле |
|
CMD/BAT - [решено] Изменение параметров в .ini файле
|
Stalker_AleX333
Сообщения: n/a |
Требуется изменить значения определенных параметров в ini файле, находящемуся по заранее известному пути. При отсутствии нужного параметра, его необходимо добавить в соответствующий раздел вида:
[Interface] fMouseCursorSpeed=1.0000 bDialogueSubtitles=0 bGeneralSubtitles=0 bShowCompass=1 [GamePlay] bShowFloatingQuestMarkers=1 bShowQuestMarkers=1 iDifficulty=0 [Controls] fMouseHeadingSensitivity=0.0200 fGamepadHeadingSensitivity=0.6667 bAlwaysRunByDefault=1 bInvertYValues=0 bGamePadRumble=1 bUseKinect=0 [Particles] iMaxDesired=750 [SaveGame] fAutosaveEveryXMins=15.0000 и т.д. Я полистал последние 5-7 страниц форума и нашел там приблизительно подходящий мне код: @Echo Off CALL :REPLINE "file.ini" "Server_address=" "Server_address=192.1.1.1" CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080" :REPLINE If Not Exist "%~1" Exit /B 1 If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp" Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" ( Echo %~3>>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp" If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1" If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1" Exit /B 0 Вот мой список значений, которые требуется установить (в самом файле порядок группировки секций может быть другим): [Display] bFXAAEnabled=0 fTreesMidLODSwitchDist=8192.000 fMeshLODLevel2FadeTreeDistance=4096.000 fMeshLODLevel1FadeTreeDistance=6144.000 iMaxDecalsPerFrame=250 iMaxSkinDecalsPerFrame=100 [MAIN] fSkyCellRefFadeDistance=600000.0000 [Trees] uiMaxSkinnedTreesToRender=200 [Water] iWaterReflectHeight=1024 iWaterReflectWidth=1024 Т.е. выглядеть это должно как-то так: set "SkyrimPrefs=%USERPROFILE%\Documents\My Games\Skyrim Special Edition" call :repline "SkyrimPrefs.ini" "bFXAAEnabled=" "bFXAAEnabled=0" call :repline "SkyrimPrefs.ini" "fTreesMidLODSwitchDist=" "fTreesMidLODSwitchDist=8192.000" call :repline "SkyrimPrefs.ini" "fMeshLODLevel1FadeTreeDistance=" "fMeshLODLevel1FadeTreeDistance=6144.000" и т.д. |
|
Отправлено: 18:49, 05-12-2017 |
Stalker_AleX333
Сообщения: n/a |
megaloman, так все работает, но после прожатия "продолжить" вываливается ошибка об отсутствии ini файла, хотя он есть и на тот момент уже отредактирован:
Скрытый текст
cls :: Копирование отсортированного списка модов set "FileIn1=Silver Raven mods pack settings\Plugins.txt" set "BoxOut1=%USERPROFILE%\AppData\Local\Skyrim Special Edition" if not exist "%BoxOut1%" md "%BoxOut1%" copy /y "%FileIn1%" "%BoxOut1%\" :: Копирование файла настроек игры Skyrim.ini set "FileIn2=Silver Raven mods pack settings\Skyrim.ini" set "BoxOut2=%USERPROFILE%\Documents\My Games\Skyrim Special Edition" if not exist "%BoxOut2%" md "%BoxOut2%" copy /y "%FileIn2%" "%BoxOut2%\" if exist "%FileIn1%" ( color 07 echo. echo. echo ■ Отсортированный список плагинов успешно скопирован в AppData пользователя. ) if exist "%FileIn2%" ( color 07 echo. echo. echo ■ Skyrim.ini успешно скопирован в папку документов пользователя. ) if not exist "%FileIn1%" ( color 0c echo. echo. echo *ОШИБКА! Файл Plugins.txt не найден! echo. echo Не удалось скопировать отсортированный список плагинов. echo Извлеките папку Silver Raven mods pack settings из установочных архивов со сборкой в папку с игрой вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу и у вас достаточно прав на доступ к папкам пользователя. ) if not exist "%FileIn2%" ( color 0c echo. echo. echo *ОШИБКА! Файл Skyrim.ini не найден! echo. echo Не удалось скопировать файл скрытых настроек игры. echo Извлеките папку Silver Raven mods pack settings из установочных архивов со сборкой в папку с игрой вручную и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу и у вас достаточно прав на доступ к папкам пользователя. ) :: Копирование измененных настроек игры в SkyrimPrefs.ini call :skyrimprefs_ini_file "%USERPROFILE%\Documents\My Games\Skyrim Special Edition\SkyrimPrefs.ini" if not %ErrorLevel%==0 goto :eof :skyrimprefs_ini_file set "FileIn3=%~1" set /a Nbeg=0 :: Контролируем наличие в cmd(exe)-шнике данных для замены for /f "usebackq delims=:" %%i in (`"findstr /b /l /i /n /c:":skyrimprefs_parameters_list" "%~dpnx0""`) do set /a nbeg=%%i if exist "%FileIn3%" ( color 07 echo. echo. echo ■ SkyrimPrefs.ini успешно отредактирован. ) if not exist "%FileIn3%" ( color 0c echo. echo. echo *ОШИБКА! Файл SkyrimPrefs.ini не найден! echo. echo Не удалось внести изменения в файл настроек игры. echo Запустите лаунчер и произведите настройки, согласно своим предпочтениям. Убедитесь, что антивирусное ПО не блокирует работу панели управления и у вас достаточно прав на доступ к папкам пользователя. ) if %Nbeg% equ 0 ( color 0c echo. echo. echo *ОШИБКА! Список параметров для SkyrimPrefs.ini не найден! echo. echo Не удалось внести изменения в файл настроек игры. echo Сообщите о данной проблеме автору сборки! Убедитесь, что антивирусное ПО не блокирует работу панели управления и у вас достаточно прав на доступ к папкам пользователя. ) @echo. @echo. ::::::::::::::::::::: После прожатия этой паузы вываливается ложная ошибка. Что-то она ломает::::::::::::::::::::::::::::::: pause ::::::::::::::::::::: :: goto main_menu :: Создаем отдельный Refresh файл, куда помещаем данные для корректировки исходного ini файла >"%FileIn3%.refresh" (for /f "usebackq tokens=*" %%i in (`"more +%nbeg% "%~dpnx0""`) do (if /i "%%i"=="goto :eof" goto :cont) &echo %%i) :cont :: Создаем временный файл из исходного, в котором удалены все упомянутые для корректировки секции >"%FileIn3%.tmp" (for /f "usebackq tokens=1* delims==" %%i in ("%FileIn3%") do ( if "%%j"=="" echo %%i if not "%%j"=="" (findstr /b /i /n /c:"%%i" "%FileIn3%.refresh" >nul 2>nul)||(echo %%i=%%j) )) :: Получаем "боевой" ini файл с именем исходного :: Берём временный файл, последовательно анализируем наличие секций в Refresh файле, если они там присутствуют, забираем их из Refresh файла :: Дописываем в эту секцию всё, что осталось во временном файле из этой секции :: Просматриваем Refresh-файл, если не находим какой-либо упомянутой там секции в боевом файле, дописываем ее в конец >"%FileIn3%" (for /f "usebackq tokens=1,* delims==" %%i in (`"more "%FileIn3%.tmp""`) do ( if "%%j"=="" ( echo %%i for /f "usebackq delims=:" %%n in (`"findstr /b /l /i /n /c:"%%i" "%FileIn3%.refresh"" 2^>nul`) do call :new_parameters %%n ) else ( (echo %%i=%%j) ) ) set /a log=1 for /f "usebackq tokens=1,* delims==" %%i in (`"more "%FileIn3%.refresh""`) do ( call :add_sections "%%i" "%%j" ) ) :: Удаляем временные файлы del "%FileIn3%.tmp" 2>nul del "%FileIn3%.refresh" 2>nul exit /b 0 :: Забираем секцию из Refresh файла :new_parameters for /f "usebackq tokens=1,* delims==" %%a in (`"more +%1 "%FileIn3%.refresh""`) do ( if "%%b"=="" goto :eof (echo %%a=%%b) ) goto :eof :: Добавляем в конечный файл отсутствующие в нём секции из Refresh файла :add_sections if %2=="" ( set /a log=1 findstr /b /l /i /n /c:%1 "%FileIn3%" >nul 2>nul && Set /a log=0 ) if %log% equ 1 if %2=="" echo %~1 if %log% equ 1 if not %2=="" echo %~1=%~2 goto :eof :: Список изменяемых секций в SkyrimPrefs.ini :skyrimprefs_parameters_list [Display] bFXAAEnabled=0 fTreesMidLODSwitchDist=8192.000 fMeshLODLevel2FadeTreeDistance=4096.000 fMeshLODLevel1FadeTreeDistance=6144.000 iMaxDecalsPerFrame=250 iMaxSkinDecalsPerFrame=100 [MAIN] fSkyCellRefFadeDistance=600000.0000 [Trees] uiMaxSkinnedTreesToRender=200 [Water] iWaterReflectHeight=1024 iWaterReflectWidth=1024 goto :eof P.S. На сообщения в личке можно забить, они устарели. Из полезного, там разве что весь остальной код, который я сюда не прикреплял. |
Последний раз редактировалось Stalker_AleX333, 07-12-2017 в 14:31. Отправлено: 14:25, 07-12-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Stalker_AleX333, Извините, не берусь искать ошибки в чужом большом коде, особенно если я не понимаю логику постановки задачи, а восстанавливать её из кода - трудоёмкая и неблагодарная работа.
Цитата Iska:
|
|
------- Отправлено: 15:09, 07-12-2017 | #12 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Stalker_AleX333,
я наверное понимаю о чем вы. bat не будет работать в интерактивном режиме, выполнив задачу по изменению ini, bat должен завершить работу. Значит bat для изменения ini должен быть свой (отдельный), а запускать его можно из основного, например: |
Отправлено: 15:27, 07-12-2017 | #13 |
Stalker_AleX333
Сообщения: n/a |
alpap, проблема в том, что не могу юзать два разных cmd-шника. Только один, упакованный в exe конвертером. Таковы условия.
А возможно, каждый раз создавать временный cmd-шник из основного, с помещением туда нужного кода, а после выполнения удаляя его? При необходимости могу прикрепить все, что есть - целиком. То, что написано выше, лишь один из пунктов, который должен выполняться, через менюшку. |
Отправлено: 16:10, 07-12-2017 | #14 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
|
|
Отправлено: 16:14, 07-12-2017 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx |
|
Отправлено: 16:41, 07-12-2017 | #16 |
Stalker_AleX333
Сообщения: n/a |
alpap, Попробовал. При запуске exe-шника выдает ошибку, что мол не могу создать файл, бла-бла-бла.cmd. Продолжить работу?
Цитата Iska:
|
|
Последний раз редактировалось Stalker_AleX333, 07-12-2017 в 17:01. Отправлено: 16:42, 07-12-2017 | #17 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Stalker_AleX333,
я тоже не горю желанием разбирать ваш многоэтажный код и исходя из всего увиденного код надо делать на PowerShell или Autoit, тогда будет и удобно что-то менять в интерактивном режиме, можно и красочно сделать - выносное меню-окно и выпадающие списки, а cmd пусть тихо покурит в сторонке, не его это задачи. |
Отправлено: 16:59, 07-12-2017 | #18 |
Stalker_AleX333
Сообщения: n/a |
alpap, да, надо бы попробовать на PowerShell. А не насиловать несчастные cmd и bat файлы. Благодарю всех за помощь. Тему закрываю.
|
Отправлено: 17:43, 07-12-2017 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Stalker_AleX333, коль Вам всё равно исполняемый файл нужо́́н — лучше попробуйте AutoIt, там хотя бы встроенные функции для работы с ini есть.
|
Отправлено: 17:54, 07-12-2017 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Загрузка параметров из ini файла в GUI | -TRM- | AutoIt | 21 | 30-09-2017 12:14 | |
CMD/BAT - Переменная в Ini файле | Renko13 | Скриптовые языки администрирования Windows | 2 | 28-06-2014 14:11 | |
Разное - в файле desktop.ini на флешке в этом файле написано... | imrik | Microsoft Windows 2000/XP | 1 | 17-03-2012 00:58 | |
Перемешивание и сортировка в INI файле | Centrinar | AutoIt | 39 | 23-06-2011 03:11 | |
CMD/BAT - [решено] Поиск и изменение содержимого в INI файле | avb_trader | Скриптовые языки администрирования Windows | 6 | 11-10-2010 08:20 |
|