如何批量复制文件夹,但只能在新文件夹中压缩文件进行存档?

时间:2013-09-20 12:18:36

标签: powershell batch-file zip archive robocopy

我正在设置一项工作,允许我将日志文件复制为Windows框中的预定批处理作业。

机器A上的当前目录是:

Logs\   YYYYMMDD\   Logfile1.log
                    Logfile2.log
                    Logfile3.log

这台机器通常随时都有3天的日志。

我已经将Robocopy作业设置为另一台服务器(计算机B)上的计划任务,将文件复制到计算机B,但不使用此命令移动已经复制的任何内容...

Robocopy "\\machineA\Logs" "\\machineB\LOGSTORAGE\machineA\Logs" /s /zb /r:2 /w:2 /eta /LOG+:\\machineB\LOGSTORAGE\logmove.log /TEE

我想要的是压缩机器A上的文件,然后移动它们而不是复制它们,以确保在移动后我不会创建由作业创建的重复zip文件。

我可以在另一个位置重新创建文件夹结构并共享它,以便机器B可以访问文件夹,但是以zip文件作为内容,如下所示:

Logs\       YYYYMMDD\       Logfile1.zip
                            Logfile2.zip
                            Logfile3.zip

理想情况下,我希望使用Windows进行压缩,而无需安装7Zip或其他压缩软件。 This page提到PowerShell可以完成这项工作,但我不知道如何根据我的要求对其进行编辑。

由于任何时候机器上可能有3天的日志,有没有办法确保zip作业只压缩尚未移动到最终目的地的文件?

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:1)

已经很长时间但我最终改变了压缩整个文件夹的要求,因为只是压缩文件意味着文件日期被保存为实际的zip创建日期而不是原始文件,并且对于此任务,日期是一切都很重要最后,只需在不创建临时目录的情况下压缩文件夹,然后让机器B使用Robocopy抓取文件就更容易了。

这是我最后使用的

@echo off
for /d %%x in ("C:\Program Files\Logs\*.*") do start "C:\Program Files\7-Zip\7z.exe" /b /low /wait "C:\Program Files\7-Zip\7z.exe" a -tzip "%%x.zip" "%%x\"

答案 1 :(得分:0)

我对Robocopy并不熟悉,但你可以做的是创建一个批处理来压缩文件,使用robocopy复制它们,然后删除它们。这可以通过将Robocopy代码放在这两者之间来完成(这使用7zip,抱歉):

@ECHO OFF
REM Adds all folders in the current directory to archives 
for /d %%a in (*) do (7za a -tzip %%~na.zip "%%a")
REM Insert Robocopy code here.
REM Deletes the remaining folders
for /d %%a in (*) do (if exist "%%a\" del "%%a")
pause

这个答案并不完美,所以如果你不理解某些事情,请问我,我会尝试澄清。