0

我有一个执行以下操作的批处理脚本

@ECHO OFF

REM move files older than 2 days from the incoming directory to the incoming archive directory
robocopy D:\Agentrics\integration\download D:\Agentrics\integration\download\archive /MOV /MINAGE:2

REM Zip files in the Archieve directory that are older than one week
FOR %%A IN (D:\Agentrics\integration\download\archive\*.txt*, D:\Agentrics\integration\download\archive\*.cpi*) DO "C:\Program Files\WinRAR\WinRAR.exe" a -r -to7d D:\Agentrics\integration\download\archive\"%%~nA.zip" "%%A"

REM Delete Original files after they are zipped
forfiles /p D:\Agentrics\integration\download\archive /s /m *.txt* /d -7 /c "cmd /c del /q @path"
forfiles /p D:\Agentrics\integration\download\archive /s /m *.cpi* /d -7 /c "cmd /c del /q @path"

REM Delete files that are older than 6 months from the archive directory
forfiles /p D:\Agentrics\integration\download\archive /s /m *.zip* /d -180 /c "cmd /c del /q @path"
pause

问题 1:当我运行脚本时,我会收到一些文件的 WinRAR 诊断消息。例如,如果传入目录中有不超过两天的文件,我会收到此消息。“WinRAR 诊断消息:没有要添加的文件”。由于此消息,脚本会停止,直到我单击对话框的关闭按钮。我正在使用 WinRAR 的免费版本并且它没有过期

问题 2:我在上面的脚本中有两个单独的命令。一种是压缩一周前的文件,另一种是在压缩后删除原始文件。我如何链接这两个命令,以便如果由于某种原因文件没有被压缩,它们也不应该被删除。或者如果文件没有被压缩,是否有命令来破坏脚本?我只想先压缩文件,然后删除原始文件

4

1 回答 1

0

我建议使用

@ECHO OFF

REM Move files older than 2 days from the incoming directory to the incoming archive directory.
robocopy D:\Agentrics\integration\download D:\Agentrics\integration\download\archive /MOV /MINAGE:2

REM Move each file in the archive directory that is older than one week into a ZIP archive.
FOR %%A IN (D:\Agentrics\integration\download\archive\*.txt*, D:\Agentrics\integration\download\archive\*.cpi*) DO "C:\Program Files\WinRAR\WinRAR.exe" m -afzip -ep -inul -to7d -y "D:\Agentrics\integration\download\archive\%%~nA.zip" "%%A"

REM Delete files that are older than 6 months from the archive directory.
forfiles /p D:\Agentrics\integration\download\archive /s /m *.zip* /d -180 /c "cmd /c del /q @path"

整个过程可以通过使用 command 来简化,m这意味着move to archive而不是 commanda意味着add to archiveWinRAR仅在成功压缩后删除文件。

使用 switch会明确-afzip通知WinRAR使用 ZIP 而不是 RAR 压缩。

该开关-ep导致从存档中的文件名中删除路径。

可以使用 switch 抑制任何错误或警告消息的输出-inul。此开关主要用于控制台版本Rar.exe(不支持 ZIP 压缩),用于输出到 stdout 和 stderr,但也适用于WinRAR。在未创建 ZIP 文件时,我从未见过诊断消息来确认使用WinRAR.exe4.20 版进行的测试,因为该文件不超过 7 天。我已经看到有关使用Rar.exe创建 RAR 存档而不使用的警告-inul,但即使不使用 switch 也不需要按键-y

我删除-r了此处不需要的递归存档开关,始终仅将 1 个文件移动到 ZIP 存档。

未修改的开关-to7d导致仅归档超过 7 天的文件。

最后-y添加了一个开关,以在所有查询中假设,尽管我从未在我的测试中看到过一个。

另一个提示:
在 NTFS 分区上,可以在文件夹上设置属性压缩,从而自动 ZIP 压缩在该文件夹中复制或创建的所有文件,以节省磁盘存储空间。

于 2014-07-05T15:58:24.037 回答