2

我使用的云服务Dropbox不保留上传文件夹的原始时间戳。在上传到 Dropbox 之前,我必须使用WinRAR压缩要在云中备份的文件夹,以保留原始文件夹的日期/时间。但是我找不到一种简单的方法来创建具有文件夹当前最后修改日期的归档文件名,格式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而不是当前日期/时间?

4

2 回答 2

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输出的帮助以及%date:~-4,4%%date:~-10,2%%dateset /?上的答案所解释的那样: ~-7,2%_%time:~0,2%%time:~3,2% 是什么意思?

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

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

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

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

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

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

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

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

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

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

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

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

  • echo /?
  • endlocal /?
  • for /?
  • rem /?
  • set /?
  • setlocal /?
于 2018-05-20T16:35:46.713 回答
0

试试这个:

rar.exe a -ag+YYYYMMDD_HHMM -cfg- -ep1 -inul -m5 -r -y "D:\Backup\source.rar" "D:\Backup\destination"
于 2021-09-30T01:26:01.697 回答