Как создать архив RAR с датой архивной папки в имени файла архива?
Используемый мной облачный сервис Dropbox не сохраняет первоначальную отметку времени загруженных папок. Я должен использовать WinRAR для сжатия папки для резервного копирования в облаке, чтобы сохранить дату / время исходной папки перед тем, как загрузить ее в Dropbox. Но я не смог найти простой способ создать имя файла архива с текущей датой последнего изменения папки в формате YYYYMMDD
в имени файла архива.
Командная строка
for %I in ("d:\doc\aatmp") do @echo %~tI
Выполняемые в командной строке окна выводят:
2014-06-01 22:12
Таким образом, формат даты FOR зависит от региона YYYY-MM-DD hh:mm
,
В настоящее время используется командная строка для создания архива RAR:
winrar a -r -agYYYYMMDD-HHMM kk "d:\doc\aatmp\"
Справка: Как создать архив RAR с текущей датой в имени файла архива?
Как узнать дату архивной папки d:\doc\aatmp
в имя файла архива kk.rar
вместо текущей даты / времени?
2 ответа
Эту задачу можно выполнить на компьютере Windows с настройками региона с помощью командного файла со следующими командными строками:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "FolderToBackup=D:\doc\aatmp"
rem Get last modification date/time of the folder to backup
rem in region dependent format which is YYYY-MM-DD hh:mm.
for %%I in ("%FolderToBackup%") do set "FolderTimeStamp=%%~tI"
rem Get from this date/time string just the year, month
rem and day of month from the date without the hyphens.
set "FolderTimeStamp=%FolderTimeStamp:~0,4%%FolderTimeStamp:~5,2%%FolderTimeStamp:~8,2%"
rem Compress the folder to backup into a RAR archive file with
rem last modification date of folder used in archive file name.
"%ProgramFiles%\WinRAR\WinRAR.exe" a -ac -cfg- -dh -ep1 -ibck -m4 -oh -ol -os -ow -r -ts -y -- kk_%FolderTimeStamp%.rar "%FolderToBackup%"
rem Restore the environment as set before usage of command SETLOCAL at top.
endlocal
Строка, присвоенная переменной среды FolderTimeStamp
это например:
2014-06-01 22:12
Эта строка должна быть изменена так:
20140601
Это делается с помощью подстановки строк, как объяснено с помощью команды SET, выводимой при запуске в окне командной строки. set /?
а также ответом на вопрос Что означает%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% значит?
Подсчет индекса начинается с 0. Первое число после :~
всегда является индексом символа (слева на положительном или справа на отрицательном), а второе число здесь всегда число символов.
Первый символ года по индексу 0
и год имеет четыре символа. По этой причине первая подстановка строки :~0,4
чтобы получить символы из индекса 0
индексировать 3
,
Дефис в символьном указателе 4
не должно быть в имени файла и по этой причине игнорируется.
Следующие два символа в строке метки времени папки - это месяц в символьных индексах 5
а также 6
что является причиной использования :~5,2
,
Дефис в символьном указателе 7
снова игнорируется, поскольку не требуется для имени файла.
Следующие два символа в строке метки времени папки - это день месяца в символьных индексах 8
а также 9
что является причиной использования :~8,2
,
Последние шесть символов, начиная с индекса 10
не представляют интереса для имени файла. Поэтому эти шесть символов тоже игнорируются.
WinRAR выполняется после определения даты последнего изменения папки для резервного копирования и переформатирования отметки времени, подходящей для имени файла архива, для создания архива RAR с этой строкой в имени файла архива со следующими дополнительными параметрами, указанными с помощью переключателей:
-ac
... очистить атрибут архива после сжатия, чтобы узнать, какие файлы включены в последний архив, а какие изменены с момента последнего резервного копирования.-cfg-
... игнорировать профиль по умолчанию и переменную среды.-dh
... открыть общие файлы.-ep1
... исключить базовую папку из имен, что означаетD:\doc
не входит в архив, но папкаaatmp
со всеми его атрибутами, отметками времени и разрешениями включается в архив. Смотрите ответ на Просто сжать 1 папку в пакете с командной строкой WinRAR? подробности о различиях при указании в командной строке"%FolderToBackup%"
без обратной косой черты в конце или"%FolderToBackup\"
с обратной косой чертой в конце.-ibck
... запустить WinRAR в фоновом режиме, что означает сворачивание в системный трей.-m4
... используйте хорошее сжатие.-oh
... сохранить жесткие ссылки в виде ссылки вместо файла.-ol
... сохранить символические ссылки в виде ссылки вместо файла.-os
... сохранить потоки NTFS.-ow
... обрабатывать информацию о безопасности файлов.-r
... рекурсивно добавлять все подпапки и файлы.-ts
... сохранить все времена файла (модификация, создание, доступ).-y
... примите да на все запросы.--
... больше нет переключателя.
Запустите WinRAR, щелкните в последнем главном меню Справка по первому пункту меню Разделы справки, перейдите на вкладку Содержание в элементе списка Режим командной строки, нажмите на элемент списка Переключатели и прочитайте соответствующую страницу справки для используемых переключателей для получения подробной информации.
Созданный архив RAR является реальной резервной копией, поскольку он включает в себя не только файлы и подпапки с их датами последнего изменения и атрибутами, но также с датами создания и последнего доступа, альтернативными потоками данных в случае, если любой файл имеет одну, жесткие и символические ссылки, и разрешения безопасности NTFS, чтобы иметь возможность действительно восстановить все при извлечении архива RAR с соответствующими коммутаторами и с использованием учетной записи, которая поддерживает восстановление даже разрешений безопасности NTFS.
Для понимания других используемых команд, которые подробно не описаны выше, и того, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
endlocal /?
for /?
rem /?
set /?
setlocal /?
Попробуй это:
rar.exe a -ag+YYYYMMDD_HHMM -cfg- -ep1 -inul -m5 -r -y "D:\Backup\source.rar" "D:\Backup\destination"