如何在将文件和文件夹添加到存档时覆盖现有的.rar存档?

时间:2017-12-06 15:47:15

标签: batch-file command-line winrar

我使用WinRAR命令行将文件存档到具有日期名称的预定义位置:20171206.rar 当我重新运行该命令时,我希望替换RAR文件而不更新。我浏览了WinRAR命令行开关列表,但没有发现任何能让我得到理想结果的东西。

欢迎任何和所有评论。

1 个答案:

答案 0 :(得分:0)

WinRAR 没有命令或切换,无法将文件和文件夹压缩到存档中的现有存档文件,就像我所知道的所有压缩工具一样。

WinRAR 使用 d 命令删除存档中的文件,删除存档文件本身,最后不包含任何文件。但我认为在创建具有相同名称的新存档文件之前,不建议使用 WinRAR 命令 d 来删除存档文件。

我使用交换机-agYYYY-MM-DD_NN来存档源文件,这使我可以每天创建多个单独的存档以进行备份。 WinRAR 会自动创建RAR归档文件,其中文件名格式为YYYY-MM-DD的当前日期,由于NN而增加了数字,即2017-12-06_01.rar2017-12-06_02.rar ,...,2017-12-07_01.rar等。我手动删除不再需要的备份存档。

对于您的任务,我建议使用以下批处理文件:

@echo off
if not exist "20??????.rar" goto CreateDayArchive
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "FileNameDate=%%I"
del "%FileNameDate:~0,8%.rar" 2>nul
set "FileNameDate="

:CreateDayArchive
rem The RAR/WinRAR command line to create the new archive with current date.

FOR 命令行以YYYYMMDD区域无关的格式获取当前日期,例如%date% produces different result in batch file when run from Scheduled Tasks in Server 2016详细说明。

使用环境变量DATE比使用命令 WMIC 要快得多。但环境变量DATE的日期格式取决于Windows区域和语言设置。在我的计算机上,环境变量DATE的日期值始终采用格式DD.MM.YYYY,这使得可以使用这个更快的批处理文件:

@echo off
del "%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%.rar" 2>nul
rem The RAR/WinRAR command line to create the new archive with current date.

此代码也适用于/-作为分隔符而不是.以及开头缩写为工作日的日期字符串,因为年,月和日可以从{{ 1}}来自右侧的字符串。因此,DATE(6 th 2017年12月)之类的日期也将通过此快速批处理代码变体进行处理。

如果Wed, 06/12/2017的区域相关日期格式为DATE,但在开头没有或没有缩写的工作日,则可以使用以下批处理文件,并交换日期和月份。

MM/DD/YYYY

有关日期字符串替换的完整说明,请参阅What does %date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% mean?上的答案,以将依赖于区域的@echo off del "%DATE:~-4%%DATE:~-10,2%%DATE:~-7,2%.rar" 2>nul rem The RAR/WinRAR command line to create the new archive with current date. 值重新格式化为所需的日期格式。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • DATE
  • del /?
  • echo /?
  • for /?
  • goto /?
  • if /?
  • rem /?
  • set /?
  • wmic /?
  • wmic os /?
  • wmic os get /?

另请阅读Microsoft有关Using Command Redirection Operators的文章,了解此处使用wmic os get localdatetime /?解释 DEL 输出错误消息以处理 STDERR 的说明如果当前目录中没有文件名中包含当前日期的RAR存档文件,则将其重定向到设备 NUL