Смотрю, здесь как и раньше, упорно советуют переходить на PowerShell, и только потом, неохотно и со скрипом помогают. Имхо, если человеку не хватает возможностей cmd, он уже сразу на Python перейдёт, и не будет привязан к платформе, если что. А уж если просит батник, то не потому, что такой ретроград и не хочет пользоваться чистеньким и новеньким павершеллом, а потому что только с батниками и умеет работать, в 70% случаев. Оставшееся спишем на банальное "да без разницы на чём, лишь бы проблему решить".
Stalker_AleX333, держите пример нужного вам. Здесь есть чтение из конфига, запись в конфиг (с сохранением комментариев), проверка на существование файлов. Это именно пример, к своему скрипту прикрутите самостоятельно.
Если непонятен принцип работы — спрашивайте, постараюсь объяснить.
Код:

@Echo Off
Setlocal EnableDelayedExpansion
Set SettingsFile=config.txt
Call :ReadCFG "%SettingsFile%"
:: Проверяем, существуют ли файлы
Set "MissingFiles[]="
For %%? In (%$RequiredFiles[]%) Do (
If Not Exist "%%~?" Set MissingFiles[]=!MissingFiles[]!, %%~?
)
If Defined MissingFiles[] (
Echo [ОШИБКА] Некоторые файлы, необходимые для корректной работы программы, не найдены:
Echo %MissingFiles[]:~2%
Echo Извлеките папку Silver Raven mods pack data из установочных архивов со сборкой в папку игры и перезапустите панель управления. Убедитесь, что антивирусное ПО не блокирует ее работу.
)
:: Проверяем значение переменной из конфига
If "%$update_installed%" == "true" (
rem goto :autoupdate
rem Выполняем апдейт и записываем изменённое значение обратно в конфиг
Set $update_installed=false
Call :WriteCFG "%SettingsFile%"
)
Pause&Exit
:: Читаем настройки из файла, игнорируем комментарии и устанавливаем переменные $имя=значение
:ReadCFG (config_file_path)
For /F "usebackq eol=# tokens=1,2* delims==" %%A In ("%~1") Do Set "$%%A=%%B"
Exit /B
:: Записываем изменённые значения в конфиг, сохраняя комментарии
:WriteCFG (config_file_path)
rem Заносим старые значения из конфига в память
Set /A i=0
For /F "usebackq skip=1 eol= tokens=* delims=" %%? In ("%~1") Do (
Set /A i+=1
Set "__ConfigLine!i!=%%?"
)
rem Создаём чистый файл конфига
Echo.# [Settings File]>"%~1"
For /L %%? In (1,1,%i%) Do (
rem Если комментарий - пропускаем как есть
If "!__ConfigLine%%?:~,1!" == "#" (
Echo.!__ConfigLine%%?!>>"%~1"
) Else (
For /F "eol= tokens=1,2* delims==" %%A In ("!__ConfigLine%%?!") Do (
rem Значение не изменилось - пропускаем как есть
If "!$%%A!" == "%%B" (
Echo.!__ConfigLine%%?!>>"%~1"
) Else (
rem Перезаписываем изменившиеся значения
Echo.%%A=!$%%A!>>"%~1"
)
)
)
)
rem Чистим за собой временные переменные
For /F "eol= tokens=1 delims==" %%V In ('Set __ConfigLine') Do Set "%%V="
Exit /B
И пример конфиг-файла:
Код:

# [Settings File]
# Файлы для проверки при запуске
RequiredFiles[]="E:\repo\vichan-ng\LICENSE.md", "E:\repo\vichan-ng\.installed", "E:\repo\vichan-ng\.gitignore", ".\..\memcard.7z"
update_installed=true
# Переменная - значение
Key=Value