7-Zip脚本,用于压缩子目录中的文件夹,然后删除原始文件夹

时间:2014-03-20 17:02:58

标签: windows compression 7zip

我有一个执行以下操作的脚本:

  1. 创建临时目录
  2. 将日志文件夹中超过1天的所有文件夹复制到临时文件夹
  3. 使用7-Zip压缩临时文件夹中的文件夹
  4. 将zip文件从临时目录传输回日志文件夹
  5. 删除临时目录
  6. 我运行的脚本如下:

    @echo off
    rem create temp directory
    
    mkdir C:\temp\%computername%\
    
    rem copy logs older than 1 days
    robocopy \\%computername%\logs C:\temp\%computername%\ /s /zb /minage:1
    
    for /d %%x in ("C:\temp\%computername%\*.*") do start "C:\Program Files\7-Zip\7z.exe" /b /low /wait "C:\Program Files\7-Zip\7z.exe" a -tzip "%%x.zip" "%%x\"                                                
    
    rem move 7z files back to log directory
    robocopy C:\temp\%computername%\ \\%computername%\Logs *.zip /s /zb /mov
    
    rem delete temp directory
    rmdir /S /Q C:\temp\%computername%\                                 
    

    以这种方式执行任务可能会让我遇到问题,因为运行的计算机上的C驱动器可能会在压缩之前首先复制文件时填满。

    我想只选择1天以前的文件并在日志文件夹中压缩它们,但无法知道如何执行此操作。

2 个答案:

答案 0 :(得分:0)

根据robocopy docs,您可以使用" / l"命令指定仅记录文件,而不是实际复制。这可以为您提供小时过滤"过滤器"您需要的功能,通过返回旧日志文件的UNC路径(并在您的7-zip命令而不是临时本地副本中指定它。)

但请注意,即使直接压缩C驱动器,C驱动器上的空间也可能不足,而不是先在本地复制它们。这只是给你买一些时间。您可能还想考虑添加一些"免费磁盘空间检查"此脚本开头的代码(或作为单独的监控服务),以便在清理时提醒您。

答案 1 :(得分:0)

我通过更改作业来解决C驱动器可能填写的问题,只是压缩与当前日志存在的目录相同的文件中的文件,从而消除了复制文件夹的影响。感谢所有人给予的帮助。