我使用WinRAR命令行将文件存档到具有日期名称的预定义位置:20171206.rar
当我重新运行该命令时,我希望替换RAR文件而不更新。我浏览了WinRAR命令行开关列表,但没有发现任何能让我得到理想结果的东西。
欢迎任何和所有评论。
答案 0 :(得分:0)
WinRAR 没有命令或切换,无法将文件和文件夹压缩到存档中的现有存档文件,就像我所知道的所有压缩工具一样。
WinRAR 使用 d 命令删除存档中的文件,删除存档文件本身,最后不包含任何文件。但我认为在创建具有相同名称的新存档文件之前,不建议使用 WinRAR 命令 d 来删除存档文件。
我使用交换机-agYYYY-MM-DD_NN
来存档源文件,这使我可以每天创建多个单独的存档以进行备份。 WinRAR 会自动创建RAR归档文件,其中文件名格式为YYYY-MM-DD
的当前日期,由于NN
而增加了数字,即2017-12-06_01.rar
,2017-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 。