Ветеран

Сообщения: 2735
Благодарности: 1699
|
Профиль
|
Отправить PM
| Цитировать
Комментарии по тексту скрипта
Код: 
@Echo Off
cls
Set "FileIn=Z:\Soft_In\Тра ля ля.ini"
rem Контролируем наличие в батнике данных для замены/обновления
Set /A Nbeg=0
For /F "usebackq delims=:" %%i In (`"FINDSTR /B /L /I /N /C:":AddParametersSpisok" "%~dpnx0""`) DO Set /A Nbeg=%%i
If %Nbeg% EQU 0 Echo !!! Не найдены параметры для замены &Pause &Exit /B 240
rem Контролируем наличие исходного ини-файла
If Not Exist "%FileIn%" Echo !!! Не найден файл "%FileIn%" &Pause &Exit /B 240
rem Организуем отдельный Refresh файл, куда помещаем из батника данные для корректировки исходного ини-файла
>"%FileIn%.Refresh" (For /F "usebackq tokens=1,* delims==" %%i In (`"more +%Nbeg% "%~dpnx0""`) DO (
If /I "%%i"=="GoTo :Eof" GoTo :Cont
If Not "%%j"=="" (Echo %%i=%%j)
If "%%j"=="" For /F "tokens=1 delims=]" %%s In ("%%i") DO (Echo %%s])
))
:Cont
rem Организуем промежуточный tmp файл из исходного, в котором удалены все упомянутые для корректировки параметры
>"%FileIn%.tmp" (For /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If "%%j"=="" For /F "tokens=1 delims=]" %%s In ("%%i") DO (Echo %%s])
If Not "%%j"=="" (FINDSTR /B /I /N /C:"%%i" "%FileIn%.Refresh" >nul 2>nul)||(Echo %%i=%%j)
))
rem Получаем боевой ини-файл с именем исходного. Берём tmp-файл,
rem Последовательно анализируем наличие секции в Refresh файле, если она там присутствует, забираем из Refresh файла всю секцию
rem Дописываем далее в эту секцию всё что осталось в tmp-файле из этой секции
rem Просматриваем Refresh-файл, если не находим какой-либо помянутой там секции в боевом файле, дописываем эту секцию в конец
>"%FileIn%" (For /F "usebackq tokens=1,* delims==" %%i In (`"more "%FileIn%.tmp""`) DO (
If "%%j"=="" (
Echo %%i
For /F "usebackq delims=:" %%n In (`"FINDSTR /B /L /I /N /C:"%%i" "%FileIn%.Refresh"" 2^>nul`) DO Call :NewParameters %%n
) Else (
(Echo %%i=%%j)
)
)
Set /A Log=1
For /F "usebackq tokens=1,* delims==" %%i In (`"more "%FileIn%.Refresh""`) DO (
Call :AddSections "%%i" "%%j"
)
)
rem Удаляем промежуточные файлы
Del "%FileIn%.tmp" 2>nul
Del "%FileIn%.Refresh" 2>nul
GoTo :Eof
rem Забираем секцию из Refresh файла
:NewParameters
For /F "usebackq tokens=1,* delims==" %%a In (`"more +%1 "%FileIn%.Refresh""`) DO (
If "%%b"=="" GoTo :Eof
(Echo %%a=%%b)
)
GoTo :Eof
rem Добавляем в конечный файл отсутствующие в нём секции из Refresh файла
:AddSections
If %2=="" (
Set /A Log=1
FINDSTR /B /L /I /N /C:%1 "%FileIn%" >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
:AddParametersSpisok
[Display]
bFXAAEnabled=01234567890
fTreesMidLODSwitchDist=8192.000
fMeshLODLevel2FadeTreeDistance=4096.000
fMeshLODLevel1FadeTreeDistance=6144.000
kuku=868768686
iMaxDecalsPerFrame=250
iMaxSkinDecalsPerFrame=100
[MAIN]
fSkyCellRefFadeDistance=600000.0000
[Trees]
uiMaxSkinnedTreesToRender=200
[Water]
iWaterReflectHeight=1024
iWaterReflectWidth=1024
GoTo :Eof
Есть одна неприятная тонкость: в конце строк, особенно в названии секций, не должно быть пробелов, которые визуально могут не восприниматься. Я доработал скрипт, чтобы этого избежать.
Я не узнаю своего скрипта, трудно понять, в чём загвоздка
Старый анекдот.
- Звонок в техподдержку: у меня не работает компьютер.
- Следует совет: а попробуйте устранить неисправность сами.
-Возмущенный клиент: а как директор фирмы смотрит на то, что вы уклоняетесь от работы?
- ответ: положительно, обычно после действий клиента доходы фирмы значительно вырастают.
|
-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.
Последний раз редактировалось megaloman, 06-12-2017 в 20:50.
Отправлено: 19:18, 06-12-2017
| #8
|