如何使用存档文件名中存档文件夹的日期创建 RAR 存档?

Posted

技术标签:

【中文标题】如何使用存档文件名中存档文件夹的日期创建 RAR 存档?【英文标题】:How to create a RAR archive with date of the archived folder in archive file name? 【发布时间】:2018-10-29 13:57:33 【问题描述】:

我使用的云服务 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\"

参考:How to create a RAR archive with current date in archive file name?

如何将存档文件夹d:\doc\aatmp 的日期放入存档文件名kk.rar 而不是当前日期/时间?

【问题讨论】:

【参考方案1】:

此任务可以在您的 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 输出的帮助以及What does %date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% mean? 上的答案所解释的那样

字符索引计数从 0 开始。:~ 之后的第一个数字始终是字符索引(正数从左或负数从右),第二个数字这里始终是数字字符数。

年份的第一个字符在字符索引0 处,年份有四个字符。出于这个原因,第一个字符串替换是 :~0,4 以获取从索引 0 到索引 3 的字符。

字符索引4 处的连字符不应出现在文件名中,因此被忽略。

文件夹时间戳字符串中接下来的两个字符是字符索引56 处的月份,这就是使用:~5,2 的原因。

字符索引7 处的连字符再次被忽略,因为文件名不需要。

文件夹时间戳字符串中接下来的两个字符是字符索引89 处的日期,这就是使用:~8,2 的原因。

从字符索引10 开始的最后六个字符对于文件名没有意义。因此这六个字符也被忽略了。

WinRAR 在确定要备份的文件夹的最后修改日期后执行,并重新格式化适合存档文件名的时间戳以创建一个 RAR 存档,存档文件名中包含该字符串,并指定了以下附加选项用开关:

-ac ... 压缩后清除 archive 属性,以了解上次存档中包含哪些文件以及自上次备份以来修改了哪些文件。 -cfg- ...忽略默认配置文件和环境变量。 -dh ... 打开共享文件。 -ep1 ... 从名称中排除基本文件夹,这意味着 D:\doc 不包含在存档中,但文件夹 aatmp 及其所有属性、时间戳和权限都包含在存档中。请参阅Simply compress 1 folder in batch with WinRAR command line? 上的答案,详细了解在命令行上指定 "%FolderToBackup%" 结尾不带反斜杠或 "%FolderToBackup\" 结尾不带反斜杠的区别。 -ibck ...在后台运行WinRAR,这意味着最小化到系统托盘。 -m4 ... 使用良好压缩。 -oh ... 将硬链接保存为链接而不是文件。 -ol ... 将符号链接保存为链接而不是文件。 -os ... 保存 NTFS 流。 -ow ... 处理文件安全信息。 -r ... 递归添加所有子文件夹和文件。 -ts ... 保存所有文件时间(修改、创建、访问)。 -y ... 假设所有查询Yes-- ... 不用再切换了。

启动WinRAR,点击最后一个主菜单帮助第一个菜单项帮助主题,点击标签目录 在列表项命令行模式上,单击列表项Switches并阅读所用开关的相应帮助页面以了解详细信息。

创建的 RAR 存档是一个真正的备份,因为它不仅包括文件和子文件夹及其最后修改日期和属性,还包括创建和最后访问日期,备用数据流以防任何文件都有一个,硬和符号链接和 NTFS 安全权限,以便能够在使用适当的开关提取 RAR 存档并使用支持甚至恢复 NTFS 安全权限的帐户时真正恢复所有内容。

要了解上面未详细解释的其他使用命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

echo /? endlocal /? for /? rem /? set /? setlocal /?

【讨论】:

【参考方案2】:

试试这个:

rar.exe a -ag+YYYYMMDD_HHMM -cfg- -ep1 -inul -m5 -r -y "D:\Backup\source.rar" "D:\Backup\destination"

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何使用存档文件名中存档文件夹的日期创建 RAR 存档?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SharpCompress 识别与给定 RAR 存档关联的卷

将文件添加到存档时不要修改文件的编辑日期

如何从某个日期之前的 .tar 存档中删除文件

使用来自 Textfile 的文件创建 7-Zip 存档 - Powershell

在 Java 中提取存档文件 [关闭]

如何在没有一些文件夹的情况下创建 tar 存档?