Изменение параметров в .ini файле
Требуется изменить значения определенных параметров в 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 Вот мой список значений, которые требуется установить (в самом файле порядок группировки секций может быть другим): [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" |
|
Кодировка файла ANSI.
CMD-шник точно не будет запускаться на WinXP, в данном случае это не проблема. |
Ждите коллег, может помогут.
|
Вот вариант решения, не совсем так, как Вы хотели
Код:
@Echo Off В батнике пропишите реальные параметры для замены/вставки между :AddParametersSpisok и GoTo :Eof аналогично моему примеру. Что не так, как Вам хотелось: В изменённом ини-файле все изменённые/добавленные строки станут сразу за заголовком секции в том порядке, как Вы их указали в батнике. Я решил (возможно ошибочно - отзовитесь :) ), что это не принципиально. Если какая-либо секция отсутствует в ини-файле, а в батнике она указана, она будет добавлена в конец ини со всеми параметрами. Я предполагал (возможно ошибочно), что имена параметров уникальны, то есть в разных секциях не может быть параметров с одинаковыми именами. Как-то малость громоздко получилось ... |
Цитата:
|
megaloman, да, это то, что мне нужно. Спасибо.
Только я, наверное, много где накосячил, впихивая эту конструкцию в свой код: Скрытый текст
Код:
cls Не выводятся мои сообщения и при отсутствии файла SkyrimPrefs.ini, cmd-шник создает таковой и прописывает в тушку все свое содержимое. |
Комментарии по тексту скрипта
Код:
@Echo Off Я не узнаю своего скрипта, трудно понять, в чём загвоздка
Старый анекдот.
- Звонок в техподдержку: у меня не работает компьютер. - Следует совет: а попробуйте устранить неисправность сами. -Возмущенный клиент: а как директор фирмы смотрит на то, что вы уклоняетесь от работы? - ответ: положительно, обычно после действий клиента доходы фирмы значительно вырастают. |
Отдельно от всего код полностью рабочий. Остался только один вопрос: как перескочить с него на другой в одном cmd-шнике?
И как он останавливается? goto :eof в самом конце его как-будто, зацикливает. Оставил все как есть, только подкрепил внизу свое барахло, и перенес информационные сообщения: Скрытый текст
Код:
cls |
Stalker_AleX333, Возмите доработаный вариант скрипта, он надёжнее. Я подчеркнул доработки.
GoTo :Eof ничего не зацикливает. Это один из способов указать на окончание завершение программной единицы: главной части и каждой подпрограммы. По моему убеждению в Вашем коде всё, что ниже ::::::::::::::::::::::::::::::::::::::::::::::::::: работать не будет. Скрипт исполняется последовательно, и после GoTo :Eof в тот кусок скрипта попасть невозможно, Вы на него никак не ссылаетесь. Так можно совместить мой код и Ваш (я его не изучал, что там делается, не смотрел). Не понимаю, почему Вы убираете контроль файла на наличие и наличие обновлений.
Код:
@Echo Off |
megaloman, так все работает, но после прожатия "продолжить" вываливается ошибка об отсутствии ini файла, хотя он есть и на тот момент уже отредактирован:
Скрытый текст
Код:
cls P.S. На сообщения в личке можно забить, они устарели. Из полезного, там разве что весь остальной код, который я сюда не прикреплял. |
Stalker_AleX333, Извините, не берусь искать ошибки в чужом большом коде, особенно если я не понимаю логику постановки задачи, а восстанавливать её из кода - трудоёмкая и неблагодарная работа.
Цитата:
|
Stalker_AleX333,
я наверное понимаю о чем вы. bat не будет работать в интерактивном режиме, выполнив задачу по изменению ini, bat должен завершить работу. Значит bat для изменения ini должен быть свой (отдельный), а запускать его можно из основного, например: Код:
::код основного |
alpap, проблема в том, что не могу юзать два разных cmd-шника. Только один, упакованный в exe конвертером. Таковы условия.
А возможно, каждый раз создавать временный cmd-шник из основного, с помещением туда нужного кода, а после выполнения удаляя его? При необходимости могу прикрепить все, что есть - целиком. То, что написано выше, лишь один из пунктов, который должен выполняться, через менюшку. |
Цитата:
|
Цитата:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx |
alpap, Попробовал. При запуске exe-шника выдает ошибку, что мол не могу создать файл, бла-бла-бла.cmd. Продолжить работу?
Цитата:
|
Stalker_AleX333,
я тоже не горю желанием разбирать ваш многоэтажный код и исходя из всего увиденного код надо делать на PowerShell или Autoit, тогда будет и удобно что-то менять в интерактивном режиме, можно и красочно сделать - выносное меню-окно и выпадающие списки, а cmd пусть тихо покурит в сторонке, не его это задачи. |
alpap, да, надо бы попробовать на PowerShell. А не насиловать несчастные cmd и bat файлы. Благодарю всех за помощь. Тему закрываю.
|
Stalker_AleX333, коль Вам всё равно исполняемый файл нужо́́н — лучше попробуйте AutoIt, там хотя бы встроенные функции для работы с ini есть.
|
Время: 01:19. |
Время: 01:19.
© OSzone.net 2001-