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

How to create a RAR archive with date of the archived folder in archive file name?

我使用的云服务Dropbox不保存上传文件夹的原始时间戳。在上传到 Dropbox 之前,我必须使用 WinRAR 压缩文件夹以在云端备份以保留原始文件夹 date/time。但是我找不到一种简单的方法来创建存档文件名,其中文件夹的当前最后修改日期格式为 YYYYMMDD in archive file.

命令行

for %I in ("d:\doc\aatmp") do @echo %~tI

在命令提示符下执行 window 输出:

2014-06-01 22:12

因此 FOR 的区域相关日期格式为 YYYY-MM-DD hh:mm.

当前用于创建 RAR 压缩文件的命令行是:

winrar a -r -agYYYYMMDD-HHMM kk "d:\doc\aatmp\"

参考:

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

此任务可以在您的 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

这是使用字符串替换完成的,如在命令提示符 window set /? 上 运行ning 上命令 SET 输出的帮助所解释的以及

上的回答

字符索引从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 及其所有属性、时间戳和权限在存档中。有关在末尾没有反斜杠的命令行 "%FolderToBackup%" 或末尾有反斜杠的 "%FolderToBackup\" 上指定差异的详细信息,请参阅 Simply compress 1 folder in batch with WinRAR command line? 上的答案。
  • -ibck ... 运行 WinRAR 在后台,这意味着最小化到系统托盘。
  • -m4 ... 使用 good 压缩。
  • -oh ... 将硬盘 links 保存为 link 而不是文件。
  • -ol ... 将符号 link 保存为 link 而不是文件。
  • -os ... 保存 NTFS 流。
  • -ow ... 处理文件安全信息。
  • -r ...递归添加所有子文件夹和文件。
  • -ts ...保存所有文件时间(修改、创建、访问)。
  • -y ... 假设所有查询都是
  • -- ... 不再切换。

启动 WinRAR,在最后一个主菜单中单击 帮助 第一个菜单项 帮助主题 , 单击列表项 命令行模式 上的选项卡 内容 ,单击列表项 开关 并阅读所用开关的相应帮助页面以获取详细信息。

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

为了理解上面没有详细解释的其他使用的命令及其工作原理,打开命令提示符 window,在其中执行以下命令,并非常仔细地完整阅读每个命令显示的所有帮助页面。

  • 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"