Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Смотрю, здесь как и раньше, упорно советуют переходить на 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

Последний раз редактировалось Anonymоus, 22-01-2019 в 01:28.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:39, 21-01-2019 | #9