Имя пользователя:
Пароль:
 

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

Ветеран


Contributor


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

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


Stalker_AleX333, Плохо, что приведён код (надо его изучать, чтобы понять смысл задачи), легче - когда поставлена задача.
Пытаюсь сформулировать: есть текстовый файл, например,
Silver Raven mods pack data\fileslist.cfg,
в котором, среди прочего, содержится список файлов в виде определённого параметра
Код: Выделить весь код
ControlPanelFilesList="Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.esp" "Silver Raven mods pack data\Additional options\Alternate Start\Alternate Start - Live Another Life.bsa" "Silver Raven mods pack data\Additional options\Serana\Cured\00002b6c.nif" и т.д.
Надо проанализировать наличие перечисленных файлов, выдать список отсутствующих, при отсутствии хоть одного файла - завершить работу. При наличии всех файлов - продолжить исполнение следующего кода.
Вот вариант
Код: Выделить весь код
@Echo Off
cls
	Set "CFG=Silver Raven mods pack data\fileslist.cfg"
	Set "FileList=ControlPanelFilesList="

	If  Not Exist "%CFG%" (Echo !!! File "%CFG%" not found  &Pause &Exit /B 2)

	Set /A N=100
	Set /A Log=0

	FOR /F "usebackq tokens=1* delims==" %%i IN (`FINDSTR /I "%FileList%" "%CFG%"`) DO (
		Set /A Log=1
		FOR %%f IN (%%j) DO If Not Exist %%f (
			Set /A N+=1 
			Call Set "@@@%%N%%=%%f"
		)
	)
	If %Log%==0 (Echo !!! Parameter "%FileList%" not found in "%CFG%" &Pause &Exit /B 2)

	If Not %N%==100 (
		Echo !!! Files not found
		FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@@"`) DO Echo %%j
		Pause
		Exit /B 2
	)

	Echo Здесь пишем остальной код 
pause
Exit /B
Восклицаний не боится! Чтобы не было проблем с "!", надо суметь обойтись без setlocal EnableDelayedExpansion
Если надо искать наличие файлов, перечисленных в разных параметрах, лучше это оформить в виде процедуры
Код: Выделить весь код
@Echo Off
cls
	Set "CFG=Silver Raven mods pack data\fileslist.cfg"

	Set /A N=100
	Call :NoFiles "%CFG%" "ControlPanelFilesList=" ||Exit /B 2
	Call :NoFiles "%CFG%" "TraLaLaFilesList=" ||Exit /B 2

	If Not %N%==100 (
		Echo !!! Files not found
		FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@@"`) DO Echo %%j
		Pause
		Exit /B 2
	)

	Echo Здесь пишем остальной код 
pause
Exit /B

:NoFiles
	If  Not Exist %1 (Echo !!! File %1 not found  &Pause &Exit /B 2)

	Set /A Log=0
	FOR /F "usebackq tokens=1* delims==" %%i IN (`FINDSTR /I %2 %1`) DO (
		Set /A Log=1
		FOR %%f IN (%%j) DO If Not Exist %%f (
			Set /A N+=1 
			Call Set "@@@%%N%%=%%f"
		)
	)
	If %Log%==0 (Echo !!! Parameter %2 not found in %1 &Pause &Exit /B 2)
Exit /B 0
Цитата Stalker_AleX333:
научить читать файл конфига:
1. в столбик
2. по такому шаблону »
Вот так, но как это связано с поиском отсутствующих файлов?
Код: Выделить весь код
@Echo Off
cls
	Set "CFG=Silver Raven mods pack data\fileslist.cfg"
	Set "Out=Silver Raven mods pack data\fileslist.cfg2"

	If  Not Exist "%CFG%" (Echo !!! File "%CFG%" not found  &Pause &Exit /B 2)

	>"%Out%" (FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul More "%CFG%"`) DO (
		Echo [%%i]
		If Not "%%j"=="" FOR %%f IN (%%j) DO Echo %%~f
		Echo.
	))
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-07-2019 в 11:43.


Отправлено: 15:42, 21-07-2019 | #7