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

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

Ветеран


Contributor


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

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


Stalker_AleX333,
Вариант без временных файлов
Код: Выделить весь код
@Echo Off
cls
	If "%~1"=="" (
		Set "Config=Z:\Soft_In\config.cfg"  
	) Else (
		Set "Config=%~1"  
	)
	If Not Exist "%Config%" (Echo File "%Config%" not found &Pause &Exit /B)
	
	Set /A NConf=1000
	FOR /F "usebackq delims=" %%s IN (`2^>nul more "%Config%"`) DO (
		Set /A NConf+=1 
		Call Set "@@Conf%%NConf%%=%%s"
		Set "%%s"
	)
	Set /A Replace=0

rem Отсутствуют файлы
	Set /A NAbs=0
	FOR %%f IN (%FControl%) DO If Not Exist "%%f" (
		Set /A NAbs+=1
		Call Set "@@NoFile%%NAbs%%=%%~f" 
		Echo File "%%~f" not found
	)
Echo.
rem Отсутствующие файлы запомнили в переменных (если надо)
	If Not %NAbs%==0 (Echo. &Set "@@NoFile")

Echo.
rem 	Удаляем файлы
	FOR %%f IN (%DelFiles%) DO If Exist "%%f" Echo Del "%%~f"

	If /I "%update_installed%"=="true" Call :autoupdate

rem Если какой-то параметр изменился, переписываем config
	If Not %Replace%==0 (
		>"%Config%" (FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul  Set "@@Conf"`) DO Echo %%j)
	)

pause
GoTo :Eof

:autoupdate
	Echo Делаем :autoupdate Соответственно указываем, что конфиг изменится
	Call :Replace "update_installed" "false"
Exit /B

:Replace
	FOR /F "usebackq tokens=1,2 delims==" %%i IN (`2^>nul Set "@@Conf"`) DO (
		If /I "%%~j"=="%~1" (Set "%%~i=%%~j=%~2" &Set /A Replace+=1)
	)
Exit /B
Каждой строке конфига соответствует переменная @@Conf1001, @@Conf1002 ...
В конфиге прописываются имена_переменной=значение
При изменении переменной из конфига в функции :Replace соответствующую переменную с префиксом @@Conf записывается измененная строка конфига
При наличии изменённых строк конфиг перепишется
Лишнее отображение информации можно убрать
Путь к конфигу можно указать в аргументе батника. Либо жестко прописать внутри

Пример конфига
Код: Выделить весь код
FControl="D:\CMD_Forum\Box_In\3 Box_In.txt" C:\kuku.exe "Z:\Box_In\Errors\исходный файл.TXT" "D:\тра ля ля.doc"
DelFiles="Z:\Soft_Out\190124.csv" "Z:\Soft_Out\190125.csv" "Z:\Soft_Out\190126.csv"
update_installed=true

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


Последний раз редактировалось megaloman, 29-01-2019 в 23:50.


Отправлено: 22:20, 29-01-2019 | #20