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

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

Новый участник


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

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


А обязательно использовать %%i?
Или вместо i можно использовать f, g и вообще, любую другую букву?

Просто с BAT знаком на уровне новичка-любителя...

И попутно вопрос...
В моём случае при использовании проверки IF NOT DEFINED необходимо делать undefine для флага $IS_DEFINED... А как?

Ошибка синтаксиса...
Код: Выделить весь код
::====================================================================================================================================
:: >> Основные настройки скрипта
@ECHO OFF
SETLOCAL
:: << << <<
::====================================================================================================================================
:: >>Назначаем необходимые переменные
:: Папка, куда необходимо копировать резервные копии
SET $BACKUP_DIR=S:\Backup
:: Путь до архиватора
SET $WINRAR=C:\Program Files\WinRAR\WinRAR.exe
:: Имя компьютера
:: %COMPUTERNAME%
:: Дата, согласно которой проверять файлы на изменение
SET $MODIFIED_SINCE=20110323
:: << << <<
::====================================================================================================================================
:: >> Определяем массив папок для копирования
SET "$FOLDER:01=C:\Documents"
SET "$FOLDER:02=C:\Letters"
SET "$FOLDER:03=C:\ThirdFolder"
:: ...и так далее...
:: << << <<
::====================================================================================================================================
:: >> Проход по всем папкам и проверка, есть ли изменения
FOR /f "tokens=2 delims==" %%i IN ('SET $FOLDER') DO (
	:: >> Устанавливаем текущий каталог
	SET $FOLDER_CURRENT=%%i
	PUSHD "%$FOLDER_CURRENT%"
	:: << << <<

	:: >> Выполняем поиск изменённых файлов
	FOR /f "tokens=1" %%i IN ('DIR /s /tw /a-d') DO (
		IF NOT DEFINED $IS_MODIFIED (
			CALL:@check %%i
		)
	)
	:: << << <<

	:: >> Проверка результата поиска изменённых файлов. Если изменений нет, то ничего не делаем
:@next
	POPD
	IF NOT DEFINED $IS_MODIFIED (
		GOTO:@continue
	)
	:: << << <<

	:: >> Если изменения есть, то упаковываем папку в архив
	::A				Добавить в архив
	::-AG+[FORMAT]	Добавить к имени архива текущие дату и время. Если перед FORMAT стоит +, то дата будет добавлена перед именем
	::CH -TL		Установить время архива по времени новейшего файла
	::-DH			Открывать совместно используемые файлы
	::-EP1			Исключить базовую папку из пути
	::-INUL			Не выводить сообщения об ошибках
	::-M5			Метод сжатия: максимальный
	::-S			Создать непрерывный архив
	::-Y			Подразумевать ответ "Да" на все вопросы
	::-X{NAME}		Не обрабатывать файл/папку NAME. [-x*\temp\] - искл. все папки temp и файлы внутри папок temp
	"%$WINRAR%" A -AG+YYYY-MM-DD CH -TL -DH -EP1 -ISNUL -M5 -S -Y "%$FOLDER_CURRENT%" ""
	:: << << <<

:@continue
)
:: << << <<
::====================================================================================================================================
GOTO:@exit
::====================================================================================================================================
:: >> Поиск изменённых файлов
:@check
FOR /f "tokens=1-3 delims=." %%i IN ("%1") DO (
	IF %%k%%j%%i geq %$MODIFIED_SINCE% (
		SET $IS_MODIFIED=1
	)
)
GOTO:eof
:: << << <<
::====================================================================================================================================
:@exit
PAUSE

Последний раз редактировалось frid-karatel, 08-05-2011 в 21:33. Причина: Добавил код


Отправлено: 21:24, 08-05-2011 | #11